導航:首頁 > 源碼編譯 > 希爾排序演算法

希爾排序演算法

發布時間:2022-01-22 11:50:12

A. 希爾排序(c語言)

void ShellSort(int r[],int n)//希爾排序
{
for(int gap=n/2;gap>=1;gap=gap/2)//以增量為d進行直接插入排序
{
CountCompare[1]++;
for(int i=d+1;i<=n;i++)//將r[i]插入到所屬的子序列中
{
r[0]=r[i];//暫存被插入記錄
CountMove[1]++;
for(int j=i-d;j>0&&r[0]<r[j];j=j-gap)
{
r[j+d]=r[j];//記錄後移gap個位置,保證仍在同一個子序列
CountCompare[1]++;
CountMove[1]++;
}
r[j+gap]=r[0];
CountMove[1]++;
}
for(int k=1;k<=n;k++)
cout<<r[i]<<" ";
}
}
//主程序就麻煩自己寫了

B. 希爾排序演算法

希爾排序(Shell Sort)是插入排序的一種。因D.L.Shell於1959年提出而得名。

希爾排序基本思想

基本思想:

先取一個小於n的整數d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重復上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。

詳細資料:http://bk..com/view/178698.htm

C. 希爾排序法屬於哪一類型的排序法

(1)交換類排序法交換類排序法是指藉助數據元素之間的互相交換進行排序的一種方法。冒泡排序法與快速排序法都屬於交換類排序方法。冒泡排序法是一種最簡單的交換類排序方法,它是通過相鄰數據元素的交換逐步將線性表變成有序。假設線性表的長度為n,則在最壞情況下,冒泡排序需要經過n/2遍的從前往後的掃描和n/2遍的從後往前的掃描,需要的比較次數為n(n–1)/2。但這個工作量不是必需的,一般情況下要小於這個工作量。快速排序法也是一種交換類的排序方法,但由於它比冒泡排序法的速度快,因此稱之為快速排序法。其關鍵是對線性表進行分割,以及對各分割出的子表再進行分割。(2)插入類排序法插入類排序法主要有簡單插入排序法和希爾排序法。簡單插入排序法,是指將無序序列中的各元素依次插入到已經有序的線性表中。在這種排序方法中,每一次比較後最多移掉一個逆序,因此,這種排序方法的效率與冒泡排序法相同。在最壞情況下,簡單插入排序需要n(n–1)/2次比較。希爾排序法對簡單插入排序做了較大的改進。它是將整個無序序列分割成若干小的子序列分別進行插入排序。希爾排序的效率與所選取的增量序列有關。在最壞情況下,希爾排序所需要的比較次數為O(n1.5)。(3)選擇類排序選擇類排序主要有簡單選擇類排序法和堆排序法。簡單選擇排序法的基本思想是:掃描整個線性表,從中選出最小的元素,將它交換到表的最前面(這是它應有的位置);然後對剩下的子表採用同樣的方法,直到子表空為止。對於長度為n的線性表,在最壞情況下需要比較n(n–1)/2次。堆排序法也屬於選擇類排序法。具有n個元素的序列(h1, h2, …, hn),當且僅當滿足條件: 或 (i=1, 2, …, n/2)時稱之為堆。可見,堆頂元素(即第一個元素)必為最大項。堆排序的方法對於規模較小的線性表並不適合,但對於較大規模的線性表來說是很有效的。在最壞情況下,堆排序需要比較的次數為O(nlog2n)。

如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活愉快! vae.la

D. 希爾排序的詳解

希爾排序基本思想:先取一個小於n的整數d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重復上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。

舉例說明:

對於這樣一個無序的數組5932611817410,想把它變成順序遞增的數組1234567891011。先隔3個元素取一次:把5284取了出來,往後搓一位,把96110取出來,再往後搓一位,又把3117取出來。分別對這三個小組排序成為遞增的序列,再插回去,如圖:

於是得到了第一趟排序的結果:2134675911810.現在再以2為間隔重復以上步驟(這次得到的是兩個小組)得到了2134576811910。最後再以1為間隔再搞一次(實際上這一步就是從左到右兩兩比較,調整位置),就得到了想要的結果。

這就是希爾排序,其要義就是先進行宏觀調整,再進行微觀調整。

E. 各種排序演算法,要求輸出排序過程,希爾排序演算法排出來的順序不對,下面是我的代碼和截圖: //希爾排序

你的for語句後面沒有用{};

F. 希爾排序問題

是49上面有一橫。這是因為有兩個49。加一橫是為了區分它們。

G. 希爾排序演算法的思想是什麼

先取一個小於n的整數d1作為第一個增量,把文件的全部記錄分成(n除以d1)個組。所有距離為d1的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重復上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。

H. 誰能給我解釋一下希爾排序演算法

我用C給你寫一個吧
void ShellSort(int *a, int n)
{
//循環變數
int i = 0;
int j = 0;
//控制增量
int k = n / 2;
int temp = 0;

while (k > 0)
{
for (i = k; i < n; i += k)
{
temp = a[i];
for (j = i - k; j >= 0 && temp < a[j]; j -= k)
{
a[j + k] = a[j];
}
a[j + k] = temp;
}
k /= 2;
}

I. 希爾排序法特點

希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序,因希爾於1959年提出而得名。該方法的基本思想是:先將整個待排元素序列分割成若干個子序列,由相隔某個「增量」的元素組成的,分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序,增量足夠小時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下,接近最好情況,效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。希爾排序法屬於插入類排序,是將整個無序列分割成若干小的子序列分別進行插入排序的方法。希爾排序的特點
希爾排序演算法與步長有直接關系。步長依次遞減,數組的局部越來越有序了。希爾排序演算法思想
因為希爾排序是通過比較相距一定間隔的元素來工作的。所以先要自定義步長的范圍。然後選擇一個當前元素,依次按照步長來尋找指定步長的元素進行比較,比較選擇出最小的元素,如果比當前元素小於指定步長的元素,就進行交換,相反就退出當前的循環查找比較。

閱讀全文

與希爾排序演算法相關的資料

熱點內容
伺服器一直崩應該用什麼指令 瀏覽:916
cm202貼片機編程 瀏覽:724
php構造函數帶參數 瀏覽:175
解壓電波歌曲大全 瀏覽:336
為啥文件夾移到桌面成word了 瀏覽:858
命令符的安全模式是哪個鍵 瀏覽:758
編程中學 瀏覽:956
單片機求助 瀏覽:993
ug加工側面排銑毛坯怎麼編程 瀏覽:271
程序員有關的介紹 瀏覽:736
支付寶使用的什麼伺服器 瀏覽:210
安卓看本地書用什麼軟體好 瀏覽:921
經傳軟體滾動凈利潤指標源碼 瀏覽:522
螢石雲視頻已加密怎麼解除 瀏覽:574
一命令四要求五建議 瀏覽:30
qq文件夾遷移不了 瀏覽:19
液體粘滯系數測定不確定度演算法 瀏覽:332
輕棧源碼 瀏覽:426
把圖片壓縮到500k 瀏覽:35
命令你自己 瀏覽:369