『 Z ·知郎』 2021-07-08 21:48 采纳率: 33.3%
浏览 63
已采纳

C语言中用希尔排序给字符串排序

输入5个字符串(仅有字母),用希尔排序按字母表顺序排序,且不分大小写。
例如:输入abc,bqg,aVK
得到:abc aVK bqg

  • 写回答

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); 
                }
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月9日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况