插入排序

来源:互联网 发布:淘宝香港地址怎么填写 编辑:程序博客网 时间:2024/06/06 03:38

基本概念:
InsertionSort(插入排序):将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据;插入排序适合于少量的排序。

时间复杂度为:O(n^2)
这里写图片描述


实例代码:

package dong.sort;/** * 插入排序 * @author YIMA * */public class InsertionSort {    public static void main(String[] args) {        Integer[] arr = {1,3,2,5,4};        InsertionSort.sort(arr);        for(int a:arr){            System.out.println(a);        }    }    private static void sort(Integer[] arr) {        int n = arr.length;        for(int i=0; i<n; i++){            //实质上该循环从j=i=1开始;然后倒序比较            for(int j = i;j>0;j--){                if(arr[j]<arr[j-1]){                    swap(arr,j,j-1);                    //因为前面的数据是已经排序好的,如果arr[j]和arr[j-1]比较                    //不满足条件的话,立即可以跳出循环。                }else{                    break;                }            }        }    }    //交换位置    private static void swap(Integer[] arr, int j, int i) {        int temp = arr[j];        arr[j] = arr[i];        arr[i] = temp;    }}

当 i= 0的时候;j=i=0;第二for循环的判断语句是j>0;可见当i=0 的时候并没有进去第二重for循环;

当 i = 1的时候;开始进入第二重for循环;开始从j=i开始倒序比较;如果后一个元素比前一个元素要小,那么需要在数组中这两个元素需要交换位置


上面代码中sort函数可以简写为

private static void sort(Integer[] arr) {        int n = arr.length;        for(int i=0; i<n; i++){            //实质上该循环从j=i=1开始;然后倒序比较            for(int j = i;j>0 && arr[j]<arr[j-1];j--){                swap(arr,j,j-1);}        }    }
原创粉丝点击