我如何使用Qsort对结构(由几个不同元素组成)进行排序
How do I sort structures (consisting of several different elements) using qsort?
具体来说,它是关于.txt文件中的列表," char name"(jmeno(" char sullame"(prijmeni(" float falive"(prumer( ->平均为平均的学生他们的成绩(评分为1-5(,按照平均水平进行排序。
到目前为止我的代码看起来像这样:
FILE *otevriSoubor(char *jmeno, char* mode)
{
FILE *soubor;
soubor = fopen(jmeno, mode);
if (!soubor)
{
printf("spatne jmeno souborun");
system("PAUSE");
exit(1);
}
return soubor;
}
int srovnaniprumeru(const void *a, const void *b)
{
int c = ((Student *) a)->prumer;
int d = ((Student *) b)->prumer;
if (c > d) return -1;
if (c < d) return 1;
return 0;
}
int main(void)
{
typedef struct
{
char jmeno[MAXDELKA];
char prijmeni[MAXDELKA];
float prumer;
} Student;
qsort(bakaweb, 5, sizeof(Student), srovnaniprumeru);
system("PAUSE");
return 0;
}
您在正确的轨道上。这是需要改进的领域:
-
您的代码不完整:您没有阅读学生详细信息。您可以将
fscanf()
用于此。 -
您根据将等级转换为
int
进行排序。如果等级不是全数字,这可能是不正确的。
完成您的代码并以此方式修复分类功能:
int srovnaniprumeru(const void *a, const void *b) {
float c = ((const Student *)a)->prumer;
float d = ((const Student *)b)->prumer;
if (c > d) return -1;
if (c < d) return 1;
return 0;
}
相关文章:
- 查找两个排序向量中共有的元素
- C++ 如何比较n个排序的整数向量以找到互元素?
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 高级选择排序 - 在一次迭代中搜索两个元素
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 将一系列已排序的元素划分为相邻组
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何在保持它们连接到同一元素的同时对 2 个数组进行排序?
- 使用 pair 创建priority_queue,以便在第一个元素相等时"<"第一个元素的排序,对第二个元素">"排序
- 如何将元素排序到矩阵C++
- 如何保持按第二个元素排序的对的优先级队列?
- 如何从两个数组中生成一对向量,然后使用CUDA/Thrust按对的第一个元素排序
- 部分排序数组,最后n个元素排序
- 如何对一对向量按降序排序,并按第二个元素排序