输入5个字符串(仅有字母),用希尔排序按字母表顺序排序,且不分大小写。
例如:输入abc,bqg,aVK
得到:abc aVK bqg
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void shellSort(); // 函数声明
char a[5][100];
int len;
int main(void)
{
int i;
len=5;
printf("请输入要排的5个字符串:");
for (i = 0; i < len; i++) {
scanf("%s",a[i]);
}
shellSort(); // 调用希尔排序函数
printf("希尔升序排列后结果为:\n");
for (i = 0; i < len; i++) { // 排序后的结果的输出
printf("%s\n",a[i]);
}
system("pause");
return 0;
}
void shellSort()
{
int i, j, k, gap; // gap 为步长
char tmp[100];
for (gap = len / 2; gap > 0; gap /= 2) { // 步长初始化为数组长度的一半,每次遍历后步长减半,
for (i = 0; i < gap; ++i) { // 变量 i 为每次分组的第一个元素下标
for (j = i + gap; j < len; j += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序
strcpy(tmp,a[j]);
k = j - gap; // j初始化为i的前一个元素(与i相差gap长度)
while (k >= 0 && (strcmp(a[k],tmp)>0) )
{
strcpy(a[k + gap] ,a[k]);
k -= gap;
}
strcpy(a[k + gap],tmp);
}
}
}
}