咨询:冒泡排序Code数组后如何同步关联Item与Price数组
哈哈,这个问题我之前写代码的时候也踩过坑!核心问题就是你把关联的商品数据拆成了三个独立数组,排序只动了Code数组,自然就和另外两个数组的对应元素脱节了。给你两个靠谱的解决思路,优先推荐第一个:
方案一:用结构体/类封装关联数据(推荐)
这是最规范也最易维护的做法——把商品的名称、编码、价格打包成一个整体数据结构,比如结构体(C/C++)、类(Java/Python)或者元组(Python),这样排序的时候操作的是整个商品对象,三个属性自然会始终绑定在一起。
举个C语言的例子:
// 定义结构体,把三个关联字段打包 typedef struct { char item[50]; int code; float price; } Product; // 用一个Product数组存储所有商品数据 Product products[100];
冒泡排序的时候,直接比较每个Product对象的code字段,交换整个对象即可:
int n = 3; // 假设共有3个商品 for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { // 按code升序排序 if (products[j].code > products[j+1].code) { // 交换整个商品对象,三个字段自动同步 Product temp = products[j]; products[j] = products[j+1]; products[j+1] = temp; } } }
如果是Python的话会更简洁,直接用元组或自定义类存储商品,然后指定排序键:
# 用列表存储元组,每个元组对应一个商品的三个属性 products = [("wine", 1298, 8.99), ("bread", 987, 3.5), ("milk", 1567, 4.2)] # 按编码(元组的第二个元素)升序排序 products.sort(key=lambda x: x[1])
排序后遍历输出,每个商品的三个属性依然是绑定的,完全不会错位!
方案二:如果必须用三个独立数组,排序时同步交换元素
要是你因为某些限制必须保留三个独立数组,那就在冒泡排序交换Code元素的同时,同步交换Item和Price数组对应索引的元素,确保三个数组的位置始终对齐。
还是以C语言为例:
// 假设已经有三个数组:item[], code[], price[],长度为n int n = 3; for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (code[j] > code[j+1]) { // 交换Code数组元素 int temp_code = code[j]; code[j] = code[j+1]; code[j+1] = temp_code; // 同步交换Item数组元素 char temp_item[50]; strcpy(temp_item, item[j]); strcpy(item[j], item[j+1]); strcpy(item[j+1], temp_item); // 同步交换Price数组元素 float temp_price = price[j]; price[j] = price[j+1]; price[j+1] = temp_price; } } }
这种方法虽然能解决问题,但缺点很明显:代码冗余,后续如果新增商品属性(比如库存),还要修改排序逻辑里的交换代码,维护成本很高,所以还是优先用方案一。
内容的提问来源于stack exchange,提问作者Isiah Jones
相关产品推荐
相关产品推荐

