读书人

c语言调用库函数qsort()开展快速排序

发布时间: 2013-01-28 11:49:56 作者: rapoo

c语言调用库函数qsort()进行快速排序
前言各种排序方法中,例如冒泡、插入,快排等我最喜欢用快速排序,特别欣赏快排的分治思想,调用系统的qsort函数前希望大家也能了解一下快速排序的原理,参考链接见:http://blog.csdn.net/zinss26914/article/details/8043168
qsort函数原型




结构体数组排序大同小异,简单的贴一道acm题,来说明结构体数组排序的方法吧
excel排序
#include <stdio.h>#include <stdlib.h>#include <string.h>struct student{char num[7];char name[9];int grade;};int compareByNum(const void *a, const void *b);int compareByName(const void *a, const void *b);int compareByGrade(const void *a, const void *b);int main(){int i, n, k;struct student people[100001];static int size = 1;while(scanf("%d %d", &n, &k) != EOF){if(n == 0)break;//接收客户端数据for(i = 0; i < n; i ++){scanf("%s %s %d", people[i].num, people[i].name, &people[i].grade);}//快速排序switch(k){case 1 ://按学号排序qsort(people, n, sizeof(people[0]), compareByNum);break;case 2 ://按姓名排序qsort(people, n, sizeof(people[0]), compareByName);break;case 3 ://按成绩排序qsort(people, n, sizeof(people[0]), compareByGrade);break;}//打印输出printf("Case %d:\n", size ++);for(i = 0; i < n; i ++){printf("%s %s %d\n", people[i].num, people[i].name, people[i].grade);}}return 0;}int compareByNum(const void *a, const void *b){const struct student *p = a;const struct student *q = b;return strcmp(p->num, q->num);}int compareByName(const void *a, const void *b){const struct student *p = a;const struct student *q = b;if(strcmp(p->name, q->name) > 0){return 1;}else if(strcmp(p->name, q->name) == 0 && strcmp(p->num, q->num) > 0){return 1;}else{return -1;}}int compareByGrade(const void *a, const void *b){const struct student *p = a;const struct student *q = b;if(p->grade > q->grade){return 1;}else if(p->grade == q->grade && strcmp(p->num, q->num) > 0){return 1;}else{return -1;}}



2楼creazierHIT昨天 18:27
我表示我一般都用sort,感觉qsort好烦!
Re: zinss26914昨天 18:44
回复creazierHITn只是写比较函数,还可以吧,而且分治的思想很经典
1楼xigangcpp昨天 00:22
你写的比较函数正确吗/
Re: zinss26914昨天 08:29
回复xigangcppn正确,基于Ubuntu12.04的gcc环境亲测,绝对不会有问题,那道excel排序也是ac后的代码

读书人网 >C语言

热点推荐