四 希爾排序 改進版插入排序

2022-07-02 01:42:10 字數 2303 閱讀 5702

希爾排序,是插入排序的改進版。將陣列內的值隔一段距離取出來當成乙個新的陣列排序,按照一定的間隔將整個陣列排序完成後,縮小間隔在排序,一直到間隔為一的時候再排一次。那麼這個時候排序完成。

如上圖所示是間隔為4的時候進行排序,然後縮短間隔重複上邊的步驟即可,一直縮短間隔到1的時候停止迴圈,這個時候就完成了排序。

直接看**吧

package

bubbling;

/*** 希爾排序

* *

@author

zy 劉會發

* @version

1.0 *

@since

2020/4/11 */

public

class

shellsort }}

print(arr);

}/*** 交換**

@param

a 要交換位置的陣列

* @param

i 要交換的位置(正確的位置)

* @param

j 最小值所在的位置

*/static

void exchange(int a, int i, int

j)

static

void print(int

a) }

public

static

void

main(string args) ;

sort(arr);}}

這樣的話是最初以間隔為4開始迴圈,每次除以2,也就是說第二次間隔為2,以此類推,這樣就完成了排序。但是實際情況下間隔也不一定為4,有可能陣列很大,那麼以4為間隔就不太合適了。

最初的方式是將陣列對半分開,無限分下去,直到不能再分。

package

bubbling;

/*** 希爾排序

* *

@author

zy 劉會發

* @version

1.0 *

@since

2020/4/11 */

public

class

shellsort }}

print(arr);

}/*** 交換**

@param

a 要交換位置的陣列

* @param

i 要交換的位置(正確的位置)

* @param

j 最小值所在的位置

*/static

void exchange(int a, int i, int

j)

static

void print(int

a) }

public

static

void

main(string args) ;

sort(arr);}}

這種方式比較簡單,據說希爾最初也是用這種方式的,但是有人提出了乙個更好的序列來作為間隔!那就是knuth序列

他張這個樣子

h=1;

h=h*3+1;

有沒有很眼熟?高中的時候沒有有見過?

package

bubbling;

/*** 希爾排序

* *

@author

zy 劉會發

* @version

1.0 *

@since

2020/4/11 */

public

class

shellsort

for (int w = h; w > 0; w = (w - 1) / 3) }}

print(arr);

}/*** 交換**

@param

a 要交換位置的陣列

* @param

i 要交換的位置(正確的位置)

* @param

j 最小值所在的位置

*/static

void exchange(int a, int i, int

j)

static

void print(int

a) }

public

static

void

main(string args) ;

sort(arr);}}

到此結束,文筆不好,還請見諒!!!歡迎吐槽!!!

插入排序的改進演算法 希爾排序

希爾排序 shell s sort 又稱縮小增量排序,類屬於插入排序。考慮到直接插入排序得一下特點 1 在待排序數基本有序情況下排序效率大大提高 2 在n很小時,其排序效率也很高。基於以上考慮,對直接插入排序進行改進,並得出希爾排序。其基本思想為 先將整個待排序記錄序列分割成若干子串行分別進行直接插...

插入排序 希爾插入排序

本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...

c版基於鍊錶的插入排序(改進版)

1.c c todo c版基於鍊錶的插入排序 author koma include include typedef struct nodelnode,linklist 建立並初始化乙個帶頭節點的鍊錶 linklist init else r p return list 列印鍊錶 void prin...