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

如何同步排序两个关联数组(数量数组与水果名称数组)

关联数组同步排序的实现方法

针对你需要同步排序数量数组和对应水果名称数组的需求,这里提供两种可靠的实现方式:

方法一:使用结构体绑定关联数据(推荐)

将数量和水果名称封装到结构体中,排序时直接对结构体数组操作,从根源上保证数据的对应关系,代码更清晰易维护。

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

// 定义结构体,绑定水果数量与名称
typedef struct {
    int count;
    char name[20]; // 预留足够空间存储水果名称
} Fruit;

// qsort 排序的比较函数,按数量升序排列
int compareFruits(const void *a, const void *b) {
    const Fruit *fruitA = (const Fruit *)a;
    const Fruit *fruitB = (const Fruit *)b;
    return fruitA->count - fruitB->count;
}

int main() {
    // 初始化结构体数组
    Fruit fruits[] = {
        {3, "apple"},
        {5, "orange"},
        {2, "banana"},
        {4, "peach"},
        {1, "watermelon"}
    };
    int arrSize = sizeof(fruits) / sizeof(fruits[0]);

    // 调用标准库qsort排序
    qsort(fruits, arrSize, sizeof(Fruit), compareFruits);

    // 输出排序结果
    printf("排序后的数量数组:\n");
    for (int i = 0; i < arrSize; i++) {
        printf("%d ", fruits[i].count);
    }
    printf("\n排序后的水果名称数组:\n");
    for (int i = 0; i < arrSize; i++) {
        printf("%s ", fruits[i].name);
    }

    return 0;
}

方法二:手动同步交换数组元素

如果不想使用结构体,可以在排序算法中,每次交换数量数组元素时,同步交换名称数组的对应元素。注意原代码中字符串数组的定义有误,需修正为字符指针数组或二维字符数组。

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

int main() {
    int numberOfFruits[] = {3, 5, 2, 4, 1};
    // 修正字符串数组定义为字符指针数组
    char *fruits[] = {"apple", "orange", "banana", "peach", "watermelon"};
    int arrSize = sizeof(numberOfFruits) / sizeof(numberOfFruits[0]);

    // 冒泡排序示例,每次交换同步处理两个数组
    for (int i = 0; i < arrSize - 1; i++) {
        for (int j = 0; j < arrSize - i - 1; j++) {
            if (numberOfFruits[j] > numberOfFruits[j+1]) {
                // 交换数量数组元素
                int tempCount = numberOfFruits[j];
                numberOfFruits[j] = numberOfFruits[j+1];
                numberOfFruits[j+1] = tempCount;

                // 同步交换名称数组元素
                char *tempName = fruits[j];
                fruits[j] = fruits[j+1];
                fruits[j+1] = tempName;
            }
        }
    }

    // 输出排序结果
    printf("排序后的数量数组:\n");
    for (int i = 0; i < arrSize; i++) {
        printf("%d ", numberOfFruits[i]);
    }
    printf("\n排序后的水果名称数组:\n");
    for (int i = 0; i < arrSize; i++) {
        printf("%s ", fruits[i]);
    }

    return 0;
}

注意事项

  • 结构体方法是更优选择,尤其是数据量较大或后续可能扩展字段时,能避免同步错误。
  • 字符串数组定义需注意:char fruits[]无法存储多个字符串,必须使用char *fruits[](指向字符串常量)或char fruits[][20](二维字符数组)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:35:39