直接插入排序

 

直接插入排序是将未排序的数据插入至已排好序序列的合适位置。
  具体流程如下:
  1、首先比较数组的前两个数据,并排序;
  2、比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置;
  3、比较第四个元素与前三个排好序的数据,并将第四个元素放入适当的位置;
   ......
  4、直至把最后一个元素放入适当的位置。
 
 
  假如有初始数据:49  38  65  97  76  13  27  49 。
  1、首先比较49和38的大小,38小,位置互换,第一轮排序后,顺序为:[38, 49, 65, 97, 76, 13, 27, 49]。
  2、对于第三个数据65,其大于38、49,所以位置不变,顺序依旧为:[38, 49, 65, 97, 76, 13, 27, 49]。
  3、对于第四个数据97,其大于38、49,65,所以位置不变,顺序为:[38, 49, 65, 97, 76, 13, 27, 49]。
  .......
  4、最终顺序为:[13, 27, 38, 49, 49, 65, 76, 97]。
 
  直接插入排序是稳定的。直接插入排序的平均时间复杂度为O(n2)。

 

public class InsertSort {

 
    /**
     * @param args
     */
    public static void main(String[] args) {       
      int [] arr = {49,38,65,97,76,13,27,49};
      InsertSort(arr);
    }
            
    //直接插入排序法
    static void InsertSort(int a[])  { 
        int tmp;
        int n = a.length;
        for (int i = 1; i < n; i++) {
          for (int j = i; j > 0; j--) {
            if (a[j] < a[j - 1]) {
                 tmp = a[j - 1];
                 a[j - 1] = a[j];
                 a[j] = tmp;
               }            
          }
           //打印每趟排序的结果
            System.out.print("n:【"+n+"】,i:【"+i+"】,a:{");
            for(int k=0;k<n;k++){
                if(k < n-1){
                  System.out.print(a[k]+",");
                }               
                if(k == n-1){
                    System.out.println(a[k]+"}");
                }
            }
        }
                         
     } 
                     
}

  

 

posted @ 2017-05-23 18:09  青色泉石  阅读(71)  评论(0)    收藏  举报