SDUT3403資料結構實驗之排序六:希爾排序
阿新 • • 發佈:2018-12-20
一個較難的排序,但是由於程式碼比較簡潔,理解起來也相對容易
若資料基本有序且記錄較少時, 直接插入排序的效率是非常好的,希爾排序就是針對一組基本有序的少量資料記錄進行排序的高效演算法。我們的任務是對於給定的資料進行希爾排序,其中增量dk=n/(2^k)(k=1,2,3……)
題目要求我們用增量n/2和1來排序,定義一個函式即可
核心程式碼之後11-16行,理解即可
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int n;
void shellsort(int *a,int d){
for(int i=d; i<n; i++){
int t = a[i];
int j;
for(j=i; j>=d&&a[j-d]>t; j-=d)
a[j] = a[j-d];
a[j] = t;
}
for(int i=0; i<n; i++){
if(i==n-1)
cout<<a[i]<<endl;
else
cout<<a[i]<<" ";
}
}
int main()
{
int a[10010];
while(cin>>n){
for(int i=0; i<n; i++){
cin>>a[i];
}
shellsort(a,n/2);
shellsort(a,1);
}
return 0;
}