现有一个数列{3,1,5,2,2},要求用插入排序进行排序:
一.插入排序(最好复杂度为O(n),最差复杂度为O(n^2))
算法流程:
1.从第一个数3开始,不用排序。
2.插入第二个数1,比较3和1,3>1?,大于则交换顺序,小于或者等于则不交换,数列变为{1,3}。
3.现插入第三个数5,3<5,不交换顺序,数列变为{1,3,5}。
4.插入第四个数2,5>2,交换顺序,数列变为{1,3,2,5},继续比较3和2,3>2,交换顺序,继续比较1和2,1<2,不交换,数列变为{1,2,3,5}。
5.插入第五个数2,5>2,交换顺序,数列变为{1,2,3,2,5},继续比较3和2,3>2,交换顺序,数列变为{1,2,2,3,5},继续比较2和2,2=2,不交换,数列变为{1,2,3,5}。
简单来说插入排序包括两个循环,外层循环插入新的待排数,内层循环从数组尾部开始和待排数进行比较,一旦不满足条件e.g list[j-1]>list[j],则此内层循环不继续执行,进入下一个外层循环。代码如下:
/***author spike wang *** * 2018-6-25 */ public static int[] sort(int[] array) { if (array==null&&array.length==2) //如果数组为空或者个数为2,则不需要排序 { return array; } for (int i=1;i<array.length-1;i++) for (int j=i+1;j>0;j--) { if (array[j-1]>array[j]) swap(array,j-1,j); } return array; } public static void swap(int[] array,int l,int r) //swap函数实现位置互换 { int temp=array[l]; array[l]=array[r]; array[r]=temp; }