C语言结构体操作:如何按出发城市升序排序航班信息结构体数组
问题原因排查
- 第一个错误是临时交换变量定义错误:你代码中写的
info temp[N];定义了一个长度为N的结构体数组,你需要的是单个结构体变量来暂存待交换的元素,修改为info temp;即可。 - C语言原生支持同类型的结构体直接用
=赋值,你想要的直接交换结构体数据的逻辑本身是合法的,不存在语法问题,你遇到的警告完全来自temp变量的类型错误。 - 补充:你当前冒泡排序的边界参数
l和r定义没有实际作用,直接用传入的dim参数写逻辑更易读,另外数组作为函数参数传入时,方括号内的max会被编译器忽略,写为info A[]即可。
修正后的代码
void BubbleSort(info A[], int dim){ int i, j; info temp; for (i = 0; i < dim - 1; i++) { for (j = 0; j < dim - 1 - i; j++) { if (strcmp(A[j].DepartureCity, A[j+1].DepartureCity) > 0) { temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } } }
其他注意点
- 结构体定义中要保证
N的宏定义足够大,避免存储航班号、城市名时出现数组越界。 - 如果后续排序性能要求更高,可以直接用C标准库的
qsort函数实现排序,不需要手动写冒泡逻辑。
内容的提问来源于stack exchange,提问作者Giovanni Giordano
相关产品推荐
相关产品推荐

