输入5个字符串(仅有字母),用希尔排序按字母表顺序排序,且不分大小写。
例如:输入abc,bqg,aVK
得到:abc aVK bqg
C语言中用希尔排序给字符串排序
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
CSDN专家-link 2021-07-08 23:37关注#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); } } } }本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用