直接插入排序(插入排序)
简介:
直接插入的思想是:是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。
例如,排序序列(3,2,1,5)的过程是,初始时有序序列为(3),然后从位置1开始,先访问到2,将2插入到3前面,得到有序序列(2,3),之后访问1,找到合适的插入位置后得到有序序列(1,2,3),最后访问5,得到最终有序序列(1,2,3,5).
实现:
package suanfa; /* * 直接插入排序 */ public class StraightInsertionSort { public static void insertSort(int[] array) { int len=array.length; for (int i = 1; i < len; i++) { int temp = array[i]; int j; for(j = i; j > 0; j--) { if(array[j-1] > temp) { array[j] = array[j-1]; }else break; } array[j]=temp; } } public static void print(int src[]) { for (int i = 0; i < src.length; i++) { System.out.print(src[i] + " "); } System.out.println(); } public static void main(String[] args) { // TODO Auto-generated method stub int array[]= {3,2,1,5}; print(array); insertSort(array); print(array); } }
分析:
最好情况下,当待排序序列中记录已经有序时,则需要n-1次比较,不需要移动,时间复杂度为 O(n) 。最差情况下,当待排序序列中所有记录正好逆序时,则比较次数和移动次数都达到最大值,时间复杂度为 O(n^2) 。平均情况下,时间复杂度为 O(n^2) 。
追梦的脚步,永不停息