快排qsort/sort

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


你可能感兴趣的:(排序)