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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值