You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符冒泡排序改为按字符串长度排序的字符串冒泡排序

字符串数组按长度冒泡排序的解决方案

核心修改说明

  • 修正字符串数组的声明方式,解决编译错误
  • 调整排序逻辑为按字符串长度比较
  • 适配打印函数输出字符串而非单个字符
  • 引入必要的标准库头文件

完整可运行代码

#include <stdio.h>
#include <string.h> // 用于strlen获取字符串长度

void sort(char *array[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            // 按字符串长度比较:前者更长则交换位置
            if (strlen(array[j]) > strlen(array[j + 1])) {
                // 交换指针,无需移动整个字符串内容,效率更高
                char *temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}

void printArray(char *array[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%s ", array[i]); // 用%s格式符打印完整字符串
    }
    printf("\n");
}

int main(void) {
    // 正确声明字符串数组:使用char*指针数组,无需指定第二维长度
    char *strings[] = { "hey", "Hello", "awesome", "a", "test" };
    
    // 计算数组元素个数:总字节数除以单个指针元素的字节数
    int size = sizeof(strings) / sizeof(strings[0]);

    sort(strings, size);
    printArray(strings, size);

    return 0;
}

关键修改细节

  1. 字符串数组声明问题
    你尝试的char string[][]会编译失败,因为C语言要求二维数组的第二维必须明确指定长度。改用char *strings[]是更灵活的方案:它是一个指向字符串字面量的指针数组,每个元素直接指向对应字符串的起始地址,无需提前限定字符串长度。

  2. 排序逻辑调整

    • 函数参数从char array[]改为char *array[],适配指针数组的处理需求
    • 比较条件替换为strlen(array[j]) > strlen(array[j+1]),通过strlen函数获取字符串的实际有效长度
    • 交换操作针对指针而非字符串内容,避免了大量字节复制,提升效率
  3. 打印函数适配

    • 参数同步改为char *array[],格式符从%c(单个字符)改为%s(完整字符串),同时添加换行符优化输出格式

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:30:36