算法(二):插入排序的思考

  1. 算法
    插入排序由N-1趟排序組成。
    這裏寫圖片描述
    對於p=1到N-1趟,插入排序保證從位置0到位置p上的元素爲已排序狀態。
    在第p趟,將位置p上的元素向左移動,直到它在前p+1個元素中的正確位置被找到的地方。
  2. 編程
int[] a = {34,8,64,51,32,21};
public static void insertionSort(int[] a) {
        Integer j;//記錄下標
        for(int p =1;p<a.length;p++) {//插入排序由N-1趟排序組成
            Integer tmp=a[p];//第p趟,插入目標值
            for(j=p;j>0&&tmp.compareTo(a[j-1])<0;j--) 
                    a[j]=a[j-1];//元素向右移動,下標左移動
            a[j]=tmp;//插入
        }
        for(int p:a) {
            System.out.print(p+" ");    
        }
    }
    tmp =a[p];行到啊a[j]=tmp;行實現數據移動而沒有明顯地使用交換。
    位置p上的元素儲存於tmp,而(在位置p之前)所有更大的元素都被向右移動一個位置。
    然後tmp被置於正確的位置上。與二叉堆實現同理。

3.分析

 嵌套循環N次迭代,平均運行時間O(N²)。
 如果輸入數據幾乎被排序,那麼插入排序運行很快,接近O(N)。

思考:
基礎:其算法的精髓在“插入”二字。
分治關聯思考:一個數列不斷分治,分爲數列是1的時候,1個元素的數列絕對是有序。
在數列爲1的基礎上,插入。(子序列形成有序序列)
過程:與目標值比,較大元素移動。最後停止的位置就是目標下標。目標值“插入”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章