如何同步排序两个关联数组(数量数组与水果名称数组)
关联数组同步排序的实现方法
针对你需要同步排序数量数组和对应水果名称数组的需求,这里提供两种可靠的实现方式:
方法一:使用结构体绑定关联数据(推荐)
将数量和水果名称封装到结构体中,排序时直接对结构体数组操作,从根源上保证数据的对应关系,代码更清晰易维护。
#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
相关产品推荐
相关产品推荐

