資料結構實驗考試(希爾排序)
阿新 • • 發佈:2018-11-26
資料結構實驗考試(希爾排序)
希爾排序具體程式碼:
#include<stdio.h> int count=0; void ShellSort(int a[],int st,int ed){ int step=ed-st+1,temp; while(step){ step=step/3+1; printf("第%d次的步長為: %d\n",count++, step); for(int i=st+step;i<=ed;i++){ if(a[i-step]>a[i]){ temp=a[i]; int j=i-step; do{ a[j+step]=a[j]; j-=step; }while(j>=st&&a[j]>=temp); a[j+step]=temp; } } if(step==1){ break; } } } int main() { int a[9]={64,87,13,47,25,2,4,16,32}; int len=9,i; printf("待排順序為:\n\n"); for(i=0;i<len;i++){ printf("%d%c",a[i],i==len-1?'\n':' '); } printf("\n\n希爾排序過程中的步長:\n"); count=1; ShellSort(a,0,9); printf("\n\n完成希爾排序後:\n\n"); for(i=0;i<len;i++){ printf("%d%c",a[i],i==len-1?'\n':' '); } printf("\n\n\n"); return 0; }
待排列的順序為:
64 , 87 , 13 , 47 , 25 , 2 , 4 , 16 , 32
共9個元素
希爾排序的演算法實現:
利用步長 跨步劃分 多塊區域,對每一塊區域進行插入排序。
步長每一次變化:step=step/3+1;
Step = 向下取整( Step 除3)+ 1
當Step =1 時相當於對所有元素進行一遍 插入排序。
完成排序即可跳出。
注意:如果是相同元素(值相同),如果被劃分到不同的區域可能會發生順序的變化。
所以這個排序演算法是不穩定的。
實現的複雜度目前還沒有證明出來。