⑴ c語言數據結構希爾排序
void main()
{
datatype R[MAXNUM];
int d[6]=[50,25,12,6,3,2,1];
for(int i=0;i<MAXNUM;i++)
scanf("%d",&R[i].key);
ShellSort(R,MAXNUM,d,6);
for(int i=0;i<MAXNUM;i++)
printf("%d",R[i].key);
}
⑵ c語言中,希爾排序程序中的問題,運行不對,是什麼原因
printf("\n排完序後的數字順序:");
for(i=1;i<=10;i++);
應該是上面這語句多了一個分號。
求採納
⑶ c語言 編程問題 希爾排序法
這里主要是先運算,再賦值,等號的右邊優先順序比左邊高,這是C語言的運算的特性。所以,上面的意思,j先減去d ,再把值賦給j.希望樓主能看懂。
⑷ C語言數據結構問題,希爾排序
int d[t-1]可以?你這是C還是C++?C語言中數組的個數是確定的,for()裡面的int i在前面定義,C不允許在for裡面定義的,你的t沒初始化,e是用來干什麼的?e = e / 2,如果是整型,5/2等於2,2/2等於1,t就等於2了
⑸ c語言希爾排序
voidShellInsertSort(inta[],intn,intdk)
{
for(inti=dk;i<n;++i){
if(a[i]<a[i-dk]){//若第i個元素大於i-1元素,直接插入。小於的話,移動有序表後插入
intj=i-dk;
intx=a[i];//復制為哨兵,即存儲待排序元素
a[i]=a[i-dk];//首先後移一個元素
while(x<a[j]){//查找在有序表的插入位置
a[j+dk]=a[j];
j-=dk;//元素後移
}
a[j+dk]=x;//插入到正確位置
}
}
}
/**
*先按增量d(n/2,n為要排序數的個數進行希爾排序
*
*/
voidshellSort(inta[],intn){
intdk=n/2;
while(dk>=1){
ShellInsertSort(a,n,dk);
dk=dk/2;
}
}
⑹ c語言數據結構希爾排序
以d=3為增量進行一趟希希爾排序後每一趟的結果,
分別為d=3和d=1:
⑺ c語言實現希爾排序演算法
希爾排序(Shell Sort)是插入排序的一種,它是針對直接插入排序演算法的改進。該方法又稱縮小增量排序,因DL.Shell於1959年提出而得名。希爾排序實質上是一種分組插入方法。它的基本思想是:對於n個待排序的數列,取一個小於n的整數gap(gap被稱為步長)將待排序元素分成若干個組子序列,所有距離為gap的倍數的記錄放在同一個組中;然後,對各組內的元素進行直接插入排序。 這一趟排序完成之後,每一個組的元素都是有序的。然後減小gap的值,並重復執行上述的分組和排序。重復這樣的操作,當gap=1時,整個數列就是有序的。
⑻ 希爾排序(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]<<" ";
}
}
//主程序就麻煩自己寫了
⑼ 希爾排序(C語言)
假設第一次分組排序後,得到的數據從分別編號為0——9
則第二次分組排序是將編號為0、2、4、6、8的五個數排序,並將編號為1、3、5、7、9的五個數排序。
即:將265、694、438、742、129五個數排序,
再將301、076、863、751、937五個數排序
因為129是第一組五個數里最小的,所以把它排在最前面。
就是這樣,建議找本數據結構書把演算法重新復習一下。