描述
编程实现希尔排序算法,按照非递减排序,测试数据为整数。
input
第一行是待排序数据元素的个数n;
第二行是待排序的数据元素。
output
一趟希尔排序后的结果。
样例输入
10
50 36 41 19 23 4 20 18 12 22
样例输出
4 20 18 12 22 50 36 41 19 23
而这道题是进行一趟希尔排序,就是把排序的循环减少到一次,具体代码如下
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 #define maxsize 1000 6 7 void shellSort(int *a,int n) 8 { 9 int i,j,gap; 10 //for(gap=n/2;gap>0;gap/=2) 11 for(gap=n/2;gap==n/2;gap/=2) 12 { 13 for(i=gap;i<n;i++) 14 { 15 for(j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap) 16 { 17 swap(a[j],a[j+gap]); 18 } 19 } 20 } 21 } 22 23 int main() 24 { 25 int n; 26 cin>>n; 27 int a[maxsize]; 28 for(int i=0;i<n;i++) 29 { 30 cin>>a[i]; 31 } 32 shellSort(a,n); 33 for(int i=0;i<n;i++) 34 { 35 cout<<a[i]<<" "; 36 } 37 return 0; 38 }