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

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日