您的位置:首页 > 其它

qsort函数用法

2015-07-22 20:56 344 查看
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;

} */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: