插入排序和希爾排序 面試的希爾排序原來這麼簡單

2021-07-23 02:52:00 字數 1297 閱讀 4909

插入排序:

實現步驟:

1 記錄第二個數的值和下標

2 迴圈與前乙個值比較

若小於則 將前乙個值付給本位置,本位置下標減一

若大於 則值與下標都不變

/**

* 插入排序

* 從第二個開始判斷 大於前乙個位置不變

* 小於前乙個 將前乙個提前,直到找到不小於的位置這時候將插入的值放在此位置,

* 由於之前的值都提前了一位,所以不存在值被覆蓋而丟失

*@param array

*@return

*/public

int insertsort(int array)

array[index]=tmp;

}long b=system.currenttimemillis();

system.out.println("插入排序用時:"+(b-a)+"公釐");

return array;

}

希爾排序:實現步驟:

1 設定gap序列即增量序列,最後一次gap必須是1

2 將相距gap的一組數按照插入排序(注意 插入排序從第二個開始)

3 插入排序 增量為gap 而不是1

/**

* 希爾排序是在插入排序基礎上改善的排序

* 插入排序思想 從第二個值開始 判斷與前乙個值的大小

*@param array

*@return

*/public

int shellsort(intarray)

long b=system.currenttimemillis();

system.out.println("插入排序用時:"+(b-a)+"公釐");

return array;

}

插入排序:由n-1趟排序組成,第i趟排序保證位置0到i-1上元素是已經排好序的。

在該演算法**實現中使用了可以減少元素交換次數的技巧:在for迴圈內,實現了陣列元素移動而沒有明顯使用交換。將插入排序的搜尋插入位置的過程和移動元素的過程合併一起進行,從而減少了元素交換次數。位置i上的元素儲存在tmp中,而位置i之前的所有更大的元素都被向右移動乙個位置;然後tmp被放置在正確的位置上。

該演算法的平均時間為o(n^2)。希爾排序是為了衝破二次時間的屏障,但是最終證明,其時間最壞情況為o(n^2),

插入排序和希爾排序

插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,插入排序的基本思想是 每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。public static void sortins...

插入排序和希爾排序

1.首先,排序按類來分有插入排序 選擇排序 交換排序和歸併排序,而插入排序又分為直接插入排序和希爾 shell 排序 選擇排序類又分為選擇排序和堆排序,交換排序分為氣泡排序和快速排序,今天主要分享插入排序和希爾排序。2.插入排序概念 插入排序 對乙個陣列中的數,比較大小,假設它是公升序排列,認為它的...

插入排序和希爾排序

author shenqi date 2018 1 15.插入排序 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 ...