用C語言實現希爾排序

2021-10-08 10:17:16 字數 689 閱讀 9363

形象地說就是像軍訓或者體育課初次進行排隊的步驟:

教官/老師讓所有人排成一隊,按1 2 3 1 2 3迴圈報數(此時下標的一定增量就是3)

報到相同數字的就重新組成一隊(分組,但事實上不會分成三組,只是邏輯上進行分組,相當於打上標記)

在每個重新組成的組裡按身高進行排序(直接插入排序)

改變增下標增量d(一般是遞減的,d/2),重複以上步驟

直到下標增量變為1,全隊排序完成

以上是希爾排序的基本思想,問題是如何用**實現這個理解起來不算難的演算法;

首先,已陣列排序為例,希爾演算法是按照下標一定增量d開始每一次迴圈的,而且每次下標一定是遞減的,直到d<=1,在希爾演算法中下標增量d遞減的方式是減半,即d=d/2,那麼初始的d如果設定為最大,即陣列的長度n,那樣第一次下標分組就越界了,要保證第一次分組能包含陣列裡所有的數,很容易就想到d應該等於陣列長度的一半於是框架就是

for(d=n/2; d>=1; d=d/2)
此時考慮如何對每一組進行插入排序,只需將每個下標為i的數與下標為i+d的數比較,大的排後邊,小的排左邊,同時注意下標。

這裡提供一種實現方式

hellsort ( int a,  int n)

a[j+d]=t; }}

}

希爾排序 C語言實現

希爾排序 shell s sort 又稱 縮小增量排序 diminishing increment sort 是插入排序的一種,因d.l.shell 於1959 年提出而得名。直接插人排序,當待排序的記錄個數較少且待排序序列的關鍵字基本有序時,效率較高。希爾排序基於以上兩點,從 減少記錄個數 和 序...

排序演算法的C語言實現 希爾排序

希爾排序和氣泡排序有點相似,但是不同的是希爾排序使用乙個序列h1,h2.hi,叫做增量序列。在使用增量hk排序後,所有相隔hk的元素都被排序。希爾排序衝破二次時間屏障的第一批演算法之一。它有乙個重要性質 hk 排序的檔案 此後將是 hk 1 排序 將保持它的 hk排序性,這樣各趟排序結果就不會打亂前...

排序演算法之希爾排序(C語言實現)

希爾排序也叫縮小增量排序,它其實是直接插入排序的一種改進版本,實質是一種分組插入方法 基本思想 演算法先將要排序的一組數按某個增量 d d減到1時,整個要排序的數被分成一組,排序完成。一般的初次取序列的一半為增量 以後每次減半,直到增量為1。基本步驟 以如下8個記錄為例,來看一下排序的過程 40,3...