标签:
将待排序数学序列分成n个子序列,子序列中每个元素相隔k,如:10个元素:4,5,6,7, 8,9, 10, 1, 2, 3,k=3时,4,7,10,3为一个子序列,5,8,1为一个子序列,6,9,2为一个子序列,不停减小k,通过插入排序方式对该子序列进行排序,最后达到有序
#include<stdio.h> #include<windows.h> int a[20]; void incrementSort(int n){ int increment = n; while(increment>1){ printf("\nincrement:%d\n",increment); increment=increment/3+1; for(int i=increment+1;i<=n;i++){ if(a[i]<a[i-increment]){ a[0]=a[i]; int j; for(j=i-increment;j>=1&&a[j]>a[0];j-=increment){ a[j+increment]=a[j]; } a[j+increment]=a[0]; } } for(int i=1;i<=10;i++){ printf("%d ",a[i]); } printf("\n"); system("pause"); } } int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } incrementSort(n); for(int i=1;i<=n;i++){ printf("%d ",a[i]); } }
标签:
原文地址:http://www.cnblogs.com/lhppom/p/5467169.html