qsort 函数中的cmp

来源:互联网 发布:淘宝html5 编辑:程序博客网 时间:2024/06/06 01:53

         qsort(a,n,sizeof(a[0]),cmp)

     qsort(指向一个要排序数组的首地址,指要排序数组的个数,每个数组的大小,cmp)

   下面将分别用int,double,char,str,struct等形式的代码来说明qsort函数的调用

 

     int 型

#include<stdio.h>#include<stdlib.h>#include<algorithm>#include<string.h>using namespace std;int cmp(const void *a,const void *b){return *(int *)b-*(int *)a;}int main(){int i,n;int a[1010];scanf("%d",&n);for( i=0;i<n;i++){scanf("%d",&a[i]); memset(a,0,sizeof(a));}qsort(a,n,sizeof(a[0]),cmp);//sort(a,a+n,cmp);for(i=0;i<n;i++){printf("%d ",a[i]);}printf("\n");return 0;}


   double型

#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b){//if(*(double *)a-*(double *)b)//return 1;   //else//return -1;return *(double *)a>*(double *)b;//这两种选一种就行 }int main(){double a[1010];int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%lf",&a[i]);}qsort(a,n,sizeof(a[0]),cmp);for(i=0;i<n;i++){printf("%lf ",a[i]);}printf("\n");}

         char型(用的是sort)

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int cmp(char a, char b){// <span style="color:#333399;">使用sort函数声明时不需要用指针变量</span>return b > a;}int main (){//int n;//scanf("%d", &n);char a[10];scanf("%s", a);sort(a, a + 3,cmp);//printf("%s\n", a);return 0;}   
<span style="font-family: Arial, Helvetica, sans-serif;">#include<stdio.h></span>
#include<stdlib.h>#include<string.h>char str[100][1010];int cmp(const void *a,const void *b){return strcmp((char *)b,(char *)a);int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",str[i]);}qsort(str,n,sizeof(str[0]),cmp);for(i=0;i<n;i++){printf("%s\n",str[i]);}return 0;}

结构体

#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{int u,w;double v;char str[1010];}b[1010];int cmp(const void *a,const void *b){//return strcmp((*(node *)a).str,(*(node *)b).str);if((*(node *)a).u==(*(node *)b).u)return (*(node *)b).w-(*(node *)a).w;return (*(node *)a).u-(*(node *)b).u;}int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d %d",&b[i].u,&b[i].w);}qsort(b,n,sizeof(b[0]),cmp);for(i=0;i<n;i++){printf("%d %d\n",b[i].u ,b[i].w);}}


 

 

 

1 0