以前不是很理解希尔排序,现在才弄清楚,希尔排序是基于直接插入排序的,只不过每次增量不同罢了。
#include <cstdio>
using namespace std;
#define MAX_NUM 100
int data[MAX_NUM];
//希尔排序
void shell_sort(int d , int N )
{
int i = 0 ;
for( i = 0 ; i<d; i++)
{
int j ;
for( j = i ; j <N ; j+=d)
{
//开始插入排序
int tmp = data[j];
int m , n ;
for( m = i ; m < j ; m+=d)
{
if(tmp<data[m])
{
//开始向后搬移
for( n = j -d ; n >=m ; n-=d)
{
data[n+d] = data[n];
}
break;
}
}
data[m] = tmp ;
}
}
for( i = 0 ; i<N ; i++)
{
printf("%d " , data[i]);
}
printf("\n");
}
int main(void)
{
int N ;
int i ;
int d[] = {5 , 3 , 1};
#ifdef DEBUG
freopen("input.txt" , "r" ,stdin);
freopen("output.txt" , "w" , stdout);
#endif
scanf("%d" , &N);
for( i = 0 ; i<N ; i++)
{
scanf("%d" , &data[i]);
}
for( i = 0 ; i<3 ; i++)
{
shell_sort(d[i] , N);
}
return 0 ;
}