希尔排序的主要思想是:使数组中任意间隔为 h 的元素都是有序的。
改进插入排序只能一次一步的挪动元素; 使交换相隔 h 的元素成为可能;
下面是C语言实现(采用唐纳德步长为3实现):
#include <cstdio>
#include <cstring>
char a[100];
int length;
void swap(char* s, int i, int j)
{
char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
void shellsort()
{
int h = 1;
while(h < length/3)
h = 3*h + 1;
while(h >= 1)
{
for(int i = h; i < length; i++){
for(int j = i; j >= h; j -= h){
if(a[j] < a[j-h])
swap(a, j, j-h);
else
break;
}
}
h = h/3;
}
}
void show()
{
printf("%s\n", a);
}
int main()
{
scanf("%s", a);
length = strlen(a);
shellsort();
show();
return 0;
}