如何用 单链表 做 选择排序
我想用单链表做学生成绩管理系统下面是我的结构体
struct Student //声明结构体类型
{
char xuehao; //学号
char name; //姓名
char kecheng; //课程
int day_grade; //平时成绩
int shiyan_grade; //实验成绩
int kaoshi_grade; //考试成绩
int end_grade; //总评成绩
struct Student *next;
};
其中,管理系统需要实现:按总评成绩高低排序 功能
我想在不改变原序列基础上排序
有人说可以用选择排序,把选出来的写入新的链表,最后新链表就是有序的,这个时候打印完新的链表,再将新链表销毁就可以了
但是我不懂怎么用单链表实现选择排序
特来求教
qsort是c语言内置的快速排序函数,来自于 C 标准库 - <stdlib.h>
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
base -- 指向要排序的数组的第一个元素的指针。
nitems -- 由 base 指向的数组中元素的个数。
size -- 数组中每个元素的大小,以字节为单位。
compar -- 用来比较两个元素的函数。
这里有一个例子:#include <stdio.h>
#include <stdlib.h>
int values[] = {34, 423, 545, 75, 7 };
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int n;
printf("排序之前的列表:\n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values);
}
qsort(values, 5, sizeof(int), cmpfunc);
printf("\n排序之后的列表:\n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values);
}
return(0);
}
运行结果:
排序之前的列表:
34 423 545 75 7
排序之后的列表:
7 34 75 423 545 666 你可以参考这段代码,当学生名成绩不同时,按照成绩高低来排列,当学生成绩相同时,按照学生姓名的字母顺序来排列
typedef struct
{
char last_name;
int stu_id;
char grade;
} student;
student input = {
{"xiaoming",910017,'A'},
{"xiaoli",934422,'C'},
{"xiaozhang",878766,'B'},
{"xiaowang",123456,'D'},
{"xiaofang",989420,'A'}
};
static int cmpstudents(const void *p1, const void *p2)
{
student *l = (student *)p1;
student *r = (student *)p2;
if (l->grade==r->grade)
{
return strcmp(l->last_name,r->last_name);
}
return (l->grade > r->grade)?(1):(-1);
}
int main ()
{
int i;
for (i=0;i<5;i++)
{
printf("%s\t%d\t%c\n",input.last_name,input.stu_id,input.grade);
}
printf("\n----------------------------\n");
qsort(input,5,sizeof(student),cmpstudents);
for (i=0;i<5;i++)
{
printf("%s\t%d\t%c\n",input.last_name,input.stu_id,input.grade);
}
return 0;
} Seawolf 发表于 2019-6-12 11:47
你可以参考这段代码,当学生名成绩不同时,按照成绩高低来排列,当学生成绩相同时,按照学生姓名的字母顺序 ...
非常感谢您的回答,可是,我没看懂::>_<::,第35行的qsort函数是从哪里来的? Seawolf 发表于 2019-6-13 00:14
qsort是c语言内置的快速排序函数,来自于 C 标准库 -
base -- 指向要排序的数组的第一个元素的指针。
{:5_106:}总算懂了,感激涕零无以言表,请受小弟一拜{:5_100:} 为之不止 发表于 2019-6-13 00:40
总算懂了,感激涕零无以言表,请受小弟一拜
不客气
页:
[1]