qsort函数用法

来源:互联网 发布:10.2越狱后抹掉数据 编辑:程序博客网 时间:2024/06/05 07:14

qsort函数;

头文件:#include<stdlib.h>

/*整形排序*/ 
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;/*按从小到大排序,若从大到小,
只需将a,b互换位置 */
}
int main()
{
int i,n;
scanf("%d",&n);
int a[10];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
/*simple input
6
    4 3 2 6 1 7
Output 
1 2 3 4 6 7 
*/
/*字符形排序*/ 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void *a,const void *b)
{
return *(char *)a-*(char *)b;/*按从小到大排序,若从大到小,
只需将a,b互换位置 */
}
int main()
{
int i,n,l;
scanf("%d",&n);
char a[1000];
while(n--)
{
scanf("%s",a);
l=strlen(a);
qsort(a,l,sizeof(a[0]),cmp);
printf("%s\n",a);
}
return 0;
}
/*simple input
2
    asdewq
    daasydgyuw
  Output 
adeqsw
aaddgssuwy*/
/*double形排序*/ 
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
if(*(double *)a>*(double *)b)
/*这是按从小到大排序 ,可以通过变化
大小符号或a,b位置变成按从大到小排序,
因为返回值是int形,我试过将cmp的类型改为double,
结果编译错误,所以用if语句进行判断*/ 
return 1;
return -1;
}
int main()
{
int i,n,m;
scanf("%d",&n);
   double a[1000];
while(n--)
{
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%lf",&a[i]);
qsort(a,m,sizeof(a[0]),cmp);
for(i=0;i<m;i++)
printf("%lf ",a[i]);
printf("\n"); 
}
return 0;
}
/*simple input
2
    3
    2.4 1.2 0.1
    0.7 2.1 0.5
  Output 
0.1 1.2 2.4
0.5 0.7 2.1*/
/*字符串形排序*/ 
#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
int cmp(const void *a,const void *b)
{
 
return strcmp((char*)a,(char *)b);
/*按从小到大排序,即按字典排序,若从大到小,
只需将a,b互换位置 */
}
int main()
{
int i,n;
    char a[1000][1000];
    scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",a[i]);
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
printf("%s\n",a[i]);
return 0;
}
/*simple input
4
    qewerqw
fasf
fsad
qrety 
  Output 
fasf
fsad
qewerqw
qrety*/
/*对结构体选择性排序*/ 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
int k;
double g;
char c[100];
}x[100];
int cmp1(const void *a,const void *b)
{
return (*(stu *)a).k-(*(stu *)b).k;
//以结构中的k为标准进行排序,此处为升序 
}
int cmp2(const void *a,const void *b)
{
//if((*(stu *)a).g>(*(stu *)b).g);
return (*(stu *)a).g > (*(stu *)b).g ? 1 : -1; 
//以结构中的g为标准进行排序,此处为升序 
//return 1;
//return -1;

int cmp3(const void *a,const void *b)
{
return strcmp((*(stu *)a).c,(*(stu *)b).c);//对字符串的排序
}
int main()
{
int n,i,j,z;
scanf("%d %d",&n,&z);
for(i=0;i<n;i++)
scanf("%d %lf %s",&x[i].k,&x[i].g,x[i].c);
if(z==1)qsort(x,n,sizeof(x[0]),cmp1);
else if(z==2)qsort(x,n,sizeof(x[0]),cmp2);
else if(z==3)qsort(x,n,sizeof(x[0]),cmp3);
for(i=0;i<n;i++)
printf("%d %lf %s\n",x[i].k,x[i].g,x[i].c);
return 0;
}


/*还有对结构体的二级排序i

nt cmp(const void *a,const void *b)  
{  
         stu * p1 = (stu*)a;  
        stu * p2 = (stu*)b;  
         if(p1->x != p2->x) return p1->x-p2->x;  
         return p1->y-p2->y;  
}  */



 

 

0 0
原创粉丝点击