插入排序基础

红宝书版本:

public class Insertion 
{
      public static void sort(Comparable[] a)
      {
          int N=a.length;
          for(int i =1;i<N;i++)
         {
             for(int j=i;j>0&& less(a[j],a[j-1]);j--)
                exch(a,j,j-1);
          }
  }
}

int数组:

private static int[] insertSort(int[]arr){
if(arr == null || arr.length < 2){
    return arr;
}
for(inti=1;i<arr.length;i++){
for(intj=i;j>0;j--){
if(arr[j]<arr[j-1]){
//TODO:
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}else{
//接下来是无用功
break;
}
}
}
return arr;
}
  1. 插入排序的本质是从第二个元素开始,将当前位置上的元素同前一个元素比较,符合条件时即交换顺序。如果一个元素小于其前面的所有元素,该元素会一步一步地挪到第一位。
  2. 插入排序所需时间取决于元素的初始顺序,即接近有序的数组使用插入排序会很快。最好情况(完全有序)需要N-1次比较,0次交换;最坏情况(完全逆序),需要~N²/2次比较和交换。
posted @ 2016-10-10 23:08  派大东  阅读(213)  评论(0编辑  收藏  举报