前言
没想到吧,c语言也不用手写快速排序耶!因为今天我发现了一个非常全能的c语言库函数——qsort,它可以对任意类型的数据进行排序。emm至于为什么会发现的呢,这是因为这周有个只能用c语言写的比赛,发现自己好像脱离了c++的各种stl,各种库函数后,好像啥都不会,于是去看c的库。
头文件引入
好来,首先使用快排函数qsort,需要先引入头文件:include<stdlib.h>
函数用法分析
qsort(ElemType *s,count,sizeof(ElemType),cmp);
该函数需要引入4个参数。分别是待排序的数组s,待排序的元素个数count,数据类型长度(注意是字节为单位的)、以及排序的方式(需要自己写,而且有些特殊)
以题带入:小明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了�N个11到10001000之间的随机整数(�≤100N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入
10 20 40 32 67 40 20 89 300 400 15
输出
8 15 20 32 40 67 89 300 400
#include<stdio.h>
#include<stdlib.h>
const int N =100;
int a[N];
int cmp(const void* a,const void *b) //看好排序函数怎么写的
{
return *(int*)a-*(int*)b; //小到大
// return *(int *b)-*(int*)a; //从大到小
}
int main()
{
int n,cnt=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(int),cmp);
for(int i=0,j=1;i<n;i++,j++)
if(a[i]==a[j]){a[i]=-1;cnt++;}
printf("%d\n",n-cnt);
for(int i=0;i<n;i++)
if(a[i]!=-1)printf("%d ",a[i]);
return 0;
}
接下来更新更多用法HH
double类型的排序
int cmp(const void * a, const void * b)
{
return((*(double*)a - *(double*)b>0)?1:-1);
}
char类型的排序
int cmp(const void *a,const void *b)
{
return (*(char *)a - *(char *)b);
}
甚至是struct类型的排序
struct Node
{
int date;
int n;
}stu[100];
int cmp(const void *a, const void *b)
{
struct Node *p= (struct Node*)a;
struct Node *q = (struct Node*)b;
if(p->date != q->date)
return(((p->date) > (q->date)) ? 1 : -1);
else
return((p->n) - (q->n));
}