希爾排序,是插入排序的改進版。將陣列內的值隔一段距離取出來當成乙個新的陣列排序,按照一定的間隔將整個陣列排序完成後,縮小間隔在排序,一直到間隔為一的時候再排一次。那麼這個時候排序完成。
如上圖所示是間隔為4的時候進行排序,然後縮短間隔重複上邊的步驟即可,一直縮短間隔到1的時候停止迴圈,這個時候就完成了排序。
直接看**吧
package這樣的話是最初以間隔為4開始迴圈,每次除以2,也就是說第二次間隔為2,以此類推,這樣就完成了排序。但是實際情況下間隔也不一定為4,有可能陣列很大,那麼以4為間隔就不太合適了。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);}}
最初的方式是將陣列對半分開,無限分下去,直到不能再分。
package這種方式比較簡單,據說希爾最初也是用這種方式的,但是有人提出了乙個更好的序列來作為間隔!那就是knuth序列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);}}
他張這個樣子
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...