【发布时间】:2020-12-04 09:26:06
【问题描述】:
我有一个程序,它将关于 10 所大学的各种信息存储为数组中的结构。我有一个名为“inputData”的函数,它通过将大学的信息转换为结构来将它们加载到数组中。我正在尝试编写一个按学费(从最高到最低)对大学进行排序的函数。我尝试使用选择排序来执行此操作,但我一直在某个地方遇到错误。
这是结构:
struct University
{
char name[50];
char city[20];
char state[3];
int rank;
int tuition;
};
这是将信息转换为结构的函数:
struct University inputData(char Name[50], char City[20], char State[3], int Rank, int Tuition){
struct University uni;
strcpy(uni.name, Name);
strcpy(uni.city, City);
strcpy(uni.state, State);
uni.rank=Rank;
uni.tuition=Tuition;
return uni;
};
然后我创建了一个结构数组并添加了所有信息:
struct University university[10];
university[0]= inputData("Princeton University", "Princeton", "NJ", 1, 45320);
university[1]= inputData("University of Virginia", "Charlottesville", "VA", 24, 52040);
university[2]= inputData("Boston College", "Chestnut Hill", "MA", 31, 51296);
university[3]= inputData("Georgia Institute of Technology", "Atlanta", "GA", 34, 32404);
university[4]= inputData("Lehigh University", "Bethlehem", "PA", 44, 48320);
university[5]= inputData("University of Chicago", "Chicago", "IL", 3, 52491);
university[6]= inputData("Duke University", "Durham", "NC", 8, 51265);
university[7]= inputData("University of Georgia", "Athens", "GA", 56, 29844);
university[8]= inputData("University of Denver", "Denver", "CO", 86, 46362);
university[9]= inputData("Loyola University Chicago", "Chicago", "IL", 99, 26270);
我正在尝试使用此功能(使用选择排序)进行排序:
void printSortedUniversity(struct University* list){
int i, j, max_idx;
for (i = 0; i < 9; i++)
{
max_idx = i;
for (j = i+1; j < 10; j++)
if (list[j].tuition > list[max_idx].tuition)
max_idx = j;
swap(&list[max_idx], &list[i]);
}
for (i=0; i<10; i++){
printInfo(list[i]);
printf("\n");
}
};
这是交换功能:
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
我不断得到:
名称:Univceton 大学城市:普林斯顿州立大学:新泽西州排名:1 学费:45320
名称:弗吉尼亚王子城:夏洛茨维尔州:弗吉尼亚州排名:24 学费:52040
名称:Univon College 城市:Chestnut Hill 州:MA 排名:31 学费:51296
名称:波斯特贾理工学院城市:亚特兰大州:GA 排名:34 学费:32404
名称:乔治大学城市:伯利恒州:宾夕法尼亚州排名:44 学费:48320
名称:芝加哥市议会:芝加哥州:伊利诺伊州排名:3 学费:52491
名称:杜克大学城市:达勒姆州:北卡罗来纳州排名:8 学费:51265
名称:乔治亚大学城市:雅典州:GA 排名:56 学费:29844
名称:丹佛市大学:丹佛州:CO 排名:86 学费:46362
名称:芝加哥洛约拉大学城市:芝加哥州:IL 排名:99 学费:26270
我不明白为什么名称会损坏以及为什么排序不起作用?我认为这是因为修改后的列表没有存储在任何地方,但我不知道如何解决这个问题。 任何帮助,将不胜感激。 谢谢你
【问题讨论】:
-
您需要编写自己的排序方式还是只使用
qsort? -
此代码假设您有固定数量的条目。 总是使用参数来准确地传达正在发生的事情。
-
提示:在使用它们的范围内声明您的迭代器变量。喜欢
for (int i = 0; ...)有助于控制事情。 -
@kashmafia 为什么要在
inputData()函数和printSortedUniversity()函数块的末尾加上;?
标签: c sorting selection-sort