You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

求助:使用Bubble Sort对字符串数组进行排序

用冒泡排序对字符串数组按字母顺序排序的完整解决方案

嘿,我来帮你搞定这个冒泡排序字符串的问题!你现在的代码只写了数组的一部分,而且还没加上冒泡排序的核心逻辑,我帮你补全并解释清楚,保证能正确按字母顺序(字典序)排序这些字符串~

首先,先给你完整的可运行代码:

#include <stdio.h>
#include <string.h>

int main() {
    // 补全完整的12个字符串元素(我帮你补充了剩余的4个合理条目)
    char *DT[12] = {
        "James Smith DT01 DT265A",
        "John Murphy DT02 DT265A",
        "Robert Lam DT03 DT265A",
        "Michael Martin DT04 DT265A",
        "William Brown DT05 DT265A",
        "David Roy DT06 DT265A",
        "Richard Tremblay DT07 DT265A",
        "Joseph Lee DT08 DT265A",
        "Thomas Wilson DT09 DT265A",
        "Charles Davis DT10 DT265A",
        "Christopher Miller DT11 DT265A",
        "Daniel Anderson DT12 DT265A"
    };
    int n = 12;
    char *temp; // 用于交换指针的临时变量

    // 冒泡排序核心逻辑
    for (int i = 0; i < n - 1; i++) {
        // 每一轮结束后,最后i个元素已经有序,所以内层循环少比较i次
        for (int j = 0; j < n - 1 - i; j++) {
            // 用strcmp比较字符串:返回>0表示DT[j]字典序在DT[j+1]之后,需要交换
            if (strcmp(DT[j], DT[j+1]) > 0) {
                temp = DT[j];
                DT[j] = DT[j+1];
                DT[j+1] = temp;
            }
        }
    }

    // 输出排序后的结果
    printf("按字母顺序排序后的列表:\n");
    for (int i = 0; i < n; i++) {
        printf("%s\n", DT[i]);
    }

    return 0;
}

几个关键知识点要注意:

  • 绝对不能直接用>/<比较字符串:C语言里char*是指针,直接比较的是内存地址,不是字符串内容。必须用strcmp()函数,它会逐字符对比ASCII值,返回结果对应字符串的字典序关系:
    • 返回值<0:前者在后者之前
    • 返回值=0:两个字符串完全相同
    • 返回值>0:前者在后者之后
  • 交换指针更高效:因为我们的数组是指针数组,每个元素指向一个字符串常量,交换指针比逐个字符复制字符串快得多,而且字符串常量也不能直接修改内容。
  • 冒泡排序的小优化:每一轮排序后,最后i个元素已经是有序的,所以内层循环可以减少i次比较,避免做无用功。

如果你的需求是按姓氏单独排序(而不是整个字符串的字典序),那需要额外处理字符串,提取出姓氏部分再比较,比如用strtok()拆分字符串,要是需要的话可以再问我哦~

内容的提问来源于stack exchange,提问作者Mick jAGGER

火山引擎 最新活动