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

希爾演算法

發布時間:2022-01-29 03:11:44

❶ 希爾排序問題

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

❷ 關於希爾演算法的問題程序如下:!!!

希爾排序一種分組插入排序。但就其實質就是逐步合並的過程。
先把序列分成5組,並組內排序:,,,,
再將組分成3大組:,,
然後分成2大組:,
最後:
每次合並都是最多O(n)的演算法,合並的次數最多O(logn),因此希爾排序理論上是O(nlogn)的演算法,但由於需要大量的數組賦值,速度並不快。

❸ 希爾排序法特點

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

❹ 希爾排序

沒問題

❺ 希爾排序法原理

希爾排序法(縮小增量法) 屬於插入類排序,是將整個無序列分割成若干小的子序列分別進行插入排序的方法。
演算法思想簡單描述
在直接插入排序演算法中,每次插入一個數,使有序序列只增加1個節點,
並且對插入下一個數沒有提供任何幫助。如果比較相隔較遠距離(稱為
增量)的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除
多個元素交換。D.L.shell於1959年在以他名字命名的排序演算法中實現
了這一思想。演算法先將要排序的一組數按某個增量d分成若干組,每組中
記錄的下標相差d.對每組中全部元素進行排序,然後再用一個較小的增量
對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成
一組,排序完成。
下面的函數是一個希爾排序演算法的一個實現,初次取序列的一半為增量,
以後每次減半,直到增量為1。
希爾排序是不穩定的。

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

我用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;
}

❼ 希爾排序的詳解

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

舉例說明:

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

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

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

❽ C++!希爾排序演算法描述,求大神指點!

j-=di在排序過程中的前期階段,看上去好像前期階段都執行了一次,即這個循環只執行了一次,其實你如果是完整跟蹤這個演算法你會明白,當該演算法進入排序的後期時,即di這個增量接近於1時,j-=di在for循環就不止只執行一次。至於為什麼需要j-=di這個操作呢,看上去好像是多此一舉,實際上這個動作是希爾排序演算法關鍵核心之一,它可以保證不會存在有遺漏排序的現象出現。而另外一個核心就是增量的取值公式。這兩個核心就構成希爾排序演算法。也是希爾排序演算法最難理解的地方。 該演算法類似於KMP演算法,關鍵是理解其演算法思想,有時很難用語言把它描述。

❾ 希爾演算法,希爾演算法分好組後,排序結果是怎麼排出來的啊請高手指點。

你說的這個程序,其實就是要先對這五組分別排序,變為14,59 20,23 17,83 13,36 28,98
然後縮小范圍,比如說排序的兩個數,下標只相差4,然後再下標只相差3,一直到1;
這是我自己寫的一個關於希爾排序的演算法。
#include"stdio.h"
#include"stdlib.h"
typedef int Status;
typedef int ElemType;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
struct Sqlist
{
ElemType *elem;
int length;
int listsize;

};
Status InitList_Sq(Sqlist &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(1);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 1;
}
Status ListInsert_Sq(Sqlist &L,int i,ElemType e)
{
ElemType *H,*q,*p;
if(i<1||i>L.length+1)
return 0;
if(L.length>=L.listsize)
{
H=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!H)
exit(1);
L.elem=H;
L.listsize+=LISTINCREMENT;

}
q=&(L.elem[i]);
p=L.elem+L.length;
for(p;p>=q;p--)
*(p+1)=*p;
*q=e;
++L.length;
return 1;

}
void Shell_Insert(Sqlist &L,int dk)
{
int i,j;
for(i=dk+1;i<=L.length;i++)
if(L.elem[i]<L.elem[i-dk])
{
L.elem[0]=L.elem[i];
for(j=i-dk;j>0 && L.elem[j]>L.elem[0];j=j-dk)
L.elem[j+dk]=L.elem[j];
L.elem[j+dk]=L.elem[0];
}

}
void Shell_Sort(Sqlist &L,int a[],int n)
{
for(int i=0;i<n;i++)
{
Shell_Insert(L,a[i]);
}

}
void Shuchu(Sqlist &L)
{
for(int i=1;i<=L.length;i++)
{
printf("%d\t",L.elem[i]);
}
printf("\n");
}
int main()
{
int a[4]={4,3,2,1};
Sqlist L;
InitList_Sq(L);
ListInsert_Sq(L,1,3);
ListInsert_Sq(L,2,5);
ListInsert_Sq(L,3,56);
ListInsert_Sq(L,4,7);
ListInsert_Sq(L,5,12);
ListInsert_Sq(L,6,35);
ListInsert_Sq(L,7,1);
ListInsert_Sq(L,8,8);
printf("排序前:\n");
Shuchu(L);
printf("排序後:\n");
Shell_Sort(L,a,4);
Shuchu(L);
return 1;
}
其實主要就是那個shell_insert和shell_sort這兩個函數。好好的看看吧。
認真的看,還是能看懂的。

閱讀全文

與希爾演算法相關的資料

熱點內容
哪些系統盤文件夾大 瀏覽:341
pdf朗讀軟體手機 瀏覽:225
ug編程實例教程 瀏覽:987
cad輸入命令時滑鼠卡頓 瀏覽:795
php過濾文件 瀏覽:757
linux配置ip命令 瀏覽:903
命令的英文怎麼讀 瀏覽:353
哪個app是自己彈音樂的 瀏覽:655
安卓變是什麼意思 瀏覽:612
qq五子棋在哪裡找app 瀏覽:837
圖片活碼二維碼生成器網站源碼 瀏覽:186
國美手機聯系人加密 瀏覽:883
成交量彩色源碼 瀏覽:118
演算法最根本的評價標准 瀏覽:366
個人資源app哪個好用 瀏覽:580
這也能切為什麼沒有安卓 瀏覽:675
可可64山寨源碼 瀏覽:641
怎麼自己解壓和釋放 瀏覽:991
思路與演算法的區別 瀏覽:156
日誌帶源碼 瀏覽:137