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);
}
}