C++ 使用冒泡排序按二维数组首列对整行排序问题求助
免责声明:以下所有地址均为虚构,仅用于学习用途。
问题根因
你当前的冒泡排序逻辑仅交换了每行的首列元素,其余列没有同步移动,所以会出现首列排序正确、但其余列和首列不匹配的问题。
修复方案
只需要在判断两行需要交换位置时,遍历该行所有6个元素完成整行交换即可,修改后的排序段代码如下:
for (int i = lastpos - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (adresser[j][0] > adresser[j + 1][0]) { // 交换整行的全部6列元素 for (int k = 0; k < 6; k++) { temp = adresser[j][k]; adresser[j][k] = adresser[j + 1][k]; adresser[j + 1][k] = temp; } } } }
优化方案(可选)
如果希望代码更易维护、排序效率更高,也可以用结构体存储单条地址信息,再调用STL的sort函数实现排序,示例代码如下:
#include <algorithm> // 定义单条地址的存储结构 struct Address { std::string lastName; std::string firstName; std::string street; std::string streetNum; std::string zipCode; std::string city; }; Address adresser[50]; // 按姓氏首字母升序排序 std::sort(adresser, adresser + lastpos, [](const Address& a, const Address& b) { return a.lastName < b.lastName; });
内容的提问来源于stack exchange,提问作者Hymandois
相关产品推荐
相关产品推荐

