qsort
/*1:对整形数组排序*/
#include<stdlib.h>
int a[];
cmp (const void *a,const void *b)
{
return *(int*)a-*(int*)b; //升序, a,b换位为降序。
}
qsort(a,n,sizeof(a[0]),cmp); //qsort(a,数组长度,sizeof(a[0]),cmp);
/*2:对字符数组排序*/
#include <stdio.h>
char a[];
#include <stdlib.h>
cmp (const void *a,const void *b)
{
return *(char*)a-*(char*)b; //升序, a,b换位为降序。
}
qsort(a,n,sizeof(a[0]),cmp); //qsort(a,数组长度,sizeof(a[0]),cmp);
/*3:对实型数组排序*/
#include<stdlib.h>
cmp (const void *a,const void *b)
{
return (*(double*)a-*(double*)b>0)?1:-1; //double不能执行a==b;
}
qsort(a,n,sizeof(a[0]),cmp); //qsort(a,数组长度,sizeof(a[0]),cmp);
/*4:对二维数组排序*/
#include <stdlib.h>
int a[][];
int comp (const void *a,const void *b)
{
return ((int *)a)[0]-((int *)b)[0]; //按a[i][0]的大小排序。
}
qsort(a,10,sizeof(int)*2,comp); //qsort(a,数组长度,sizeof(a[0]),cmp);
/*5.对结构体*/
#include <stdio.h>
#include <stdlib.h>
struct ac//结构体
{
int front,rear;
int v;
}seat[105];
int cmp(const void a,const void b)//cmp
{
int c=(*(ac *)a).v-(*(ac *)b).v;
if (c>0)
return 1;
else
return -1;
}
int main()
{
while(scanf("%d %d",&m,&n)!=EOF)//m条路,n个村子
{
int i,j;
int sum=0;
for(i=1;i<=m;i++)
scanf("%d",&seat[i].v);
qsort(&seat[1],m,sizeof(seat[1]),cmp);
}
return 0;
}
/*6.字符串快排*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int comp(const void *a,const void *b)
{
return strcmp((char *)a,(char *)b);
}
int main()
{
char s[100][100];
qsort(s,n,sizeof(s[1]),comp);
return 0;
}
__________________________________________________________________________________________
sort
!!!为相对qsort的区别
/*1.对结构体*/
#include <stdio.h>
#include <algorithm> //!!!
using namespace std; //!!!
typedef struct ac
{
int num1,num2,def,v;
}node;
int cmp(node a,node b) ///!!!
{
int d=a.def-b.def;
if(d!=0)
return d>0;
d=a.num2-b.num2;
if(d!=0)
return d<0;
return a.v<b.v;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
node people[110];
int i;
for(i=0;i<n;i++)
{
scanf("%d %d",&people[i].num1,&people[i].num2);
people[i].def=people[i].num1-people[i].num2;
people[i].v=i;
}
sort(people,people+n,cmp); ///!! sort(起始地址,终止地址,cmp)
for(i=0;i<n;i++)
{
printf("%d",people[i].v);
if(i<n-1)
printf(" ");
else
printf("\n");
}
}
return 0;
}