qsort用法
来源:互联网 发布:mac脚本编辑器怎么用 编辑:程序博客网 时间:2024/05/19 17:47
对其的说明:
qsort,包含在stdlib.h文件里,函数一共有四个参数,没有返回值,函数原型为:CRTIMP void __cdecl qsort(void*, size_t, size_t,
int (*)(const void*, const void*)),形象的说一个典型的用法为:qsort(s,n,sizeof(s[0]),cmp);
第一个参数是参与排序的数组名第二个是参与排序的元素个数,第三个是单个元素的大小,第四个参数有点麻烦是一个指向函数的指针,由于函数名本身代表一个地址,因此在使用时可直接将第四个参数写成函数名,下面通过例子对其进行说明。
1、最常见的,对int数组进行排序
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int s[10];
int i;
for(i=0;i<10;i++)
s[i]=9-i;
qsort(s,10,sizeof(s[0]),cmp);
for(i=0;i<10;i++)
printf("%d ",s[i]);
printf("/n");
return 0;
}
2、对double型数组进行排序
注意cmp函数因为double数是不可相等的,所以在判断时返回里只用了1和-1
#include <stdio.h>
#include <stdlib.h>
double s[1000];
int i,n;
int cmp(const void * a, const void * b)
{
return((*(double*)a-*(double*)b>0)?1:-1);
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%lf",&s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++) printf("%lf ",s[i]);
return(0);
}
3、对字符串数组排序(char s[][])
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char s[100][100];
int i,n;
int cmp(const void *a,const void *b)
{
return(strcmp((char*)a,(char*)b));
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%s",s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++) printf("%s/n",s[i]);
return(0);
}
4、对char型指针数组排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *s[100];
int i,n;
int cmp(const void *a,const void *b)
{
return(strcmp(*(char**)a,*(char**)b));
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
s[i]=(char*)malloc(sizeof(char*));
scanf("%s",s[i]);
}
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++) printf("%s/n",s[i]);
return(0);
}
说明:
快速排序是不稳定的,因此在对有相同元素的数据进行排序时将会产生影响,最常见的例子是结构体排序,对于这种情况可在cmp函数作作手脚,使其变的稳定,代码如下
#include <stdio.h>
#include <stdlib.h>
struct node
{
double date1;
int no;
} s[100];
int i,n;
int cmp(const void *a,const void *b)
{
struct node *aa=(node *)a;
struct node *bb=(node *)b;
if(aa->date1!=bb->date1)
return(((aa->date1)>(bb->date1))?1:-1);
else
return((aa->no)-(bb->no));
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
s[i].no=i+1;
scanf("%lf",&s[i].date1);
}
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;i<n;i++)printf("%d %lf/n",s[i].no,s[i].date1);
return(0);
}
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort 用法
- qsort用法
- Qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- qsort用法
- 快速排序qsort用法
- qsort用法(转)
- Javascript 制作动态时钟代码
- 在中断函数和MAIN函数中同时调用同一个函数的有趣现象
- MYSQL UNION 用法
- break语句的使用和功能
- STC单片机的DS18B20的C程序
- qsort用法
- Understanding Unicast Reverse Path Forwarding
- unicast、broadcast、multicast的区别
- java伪静态--文件防盗链的实现
- mF will never work
- 3.3.3 面向属性的编程
- struts2 小总结
- 互联网迟到的80 后:为什么中国出不了扎克伯格 - CSDN资讯
- jTracert Quick Start 以及 使用方法