问题:希尔排序又叫缩小增量排序。增量的选取为d=length/2;d=d/2...d=1;
代码:
#include <iostream> using namespace std; void shellSort(int arr[],int length) { int d; int temp; int j,k; static int count=1; for(d=length/2;d>=1;d=d/2) { for(j=d;j<length;j++) { for(k=j-d;k>=0;k=k-d) { if(arr[k]>arr[k+d]) { temp=arr[k+d]; arr[k+d]=arr[k]; arr[k]=temp; } } } cout<<"第"<<count<<"趟希尔排序:"; for(int i=0;i<length;i++) { cout<<arr[i]<<" "; } cout<<endl; } } void display(int arr[],int length) { int i; for(i=0;i<length;i++) { cout<<arr[i]<<" "; } cout<<endl; } int main() { int array[]={7,2,34,8,7,68,1,30,21,6}; cout<<"希尔排序前:"<<endl; display(array,10); shellSort(array,10); cout<<"希尔排序后:"<<endl; display(array,10); return 0; }
运行结果: