【发布时间】:2019-02-09 04:12:50
【问题描述】:
我正在尝试编写一个函数,询问用户要排序的结构元素,然后打印排序列表。我正在使用单独的数组(排序索引)对元素进行排序而不改变结构本身,但无法获得对元素进行实际排序的函数。我正在使用嵌套的 for 循环进行排序。
typedef struct {
unsigned long term;
unsigned long id_num;
char dept[5];
int crs_num;
} crsinfo_t;
int main(void)
{
int i;
crsinfo_t info[50];
i = 50;
/* I read the info in from a file but just didn't include that bit*/
sort(i, info);
return(0);
}
void sort(int i, crsinfo_t info[50])
{
int sorter[50];
int holder = 0;
int f, j, k, m, n;
for (f=0; f<=i; f++){
sorter[f] = f;
}
for (j = 0; j < i; j++) {
for (k = j+1; k < i; k++) {
if (info[j].term <= info[k].term) {
holder = sorter[j];
sorter[j] = sorter[k];
sorter[k] = holder;
}
}
}
for (m=0; m<i; m++)
{
printf("%lu %lu %s %2d \n", info[sorter[m]].term),
info[sorter[m]].id_num, info[sorter[m]].dept,
info[sorter[m]].crs_num}
}
}
它应该以升序打印基于term 排序的所有元素的列表,但数字仍然是随机组织的(尽管与原始文件不同)。
【问题讨论】:
-
由于
f<=i,您的程序最终会访问超出其大小的sorter数组 -sorter[f]。
标签: c