qsort(快速排序)用法

首先需要写一个比较的函数comp

注意qsort在c语言中头文件为stdlib.h

#include "stdio.h"
#include "stdlib.h"
int comp(const void *a,const void *b)
{   return *(int*)a-*(int*)b;//上面为ab,这个地方也为ab,即从小到大,如果方向不这样比如ab,ba就是从大到小
}
int main()
{
    int a[3],i;
    for(i=0;i<3;i++)
        scanf("%d",&a[i]);
    qsort(a,3,sizeof(int),comp);
    for(i=0;i<3;i++)
        printf("%d",a[i]);
        
}//记住排序方式,这个为从小到大(可以看一下a,b顺序,上面ab顺序相同)

如何对单个字母进行快速排序,只需将comp函数改一下

#include <stdio.h>
#include <string.h>
#include "stdlib.h"
int comp(const void *a,const void *b)
{   return *(char*)a-*(char*)b;//
}
int main(int argc, const char * argv[])
{

    char a[100];
    scanf("%s",a);
    qsort(a,strlen(a),sizeof(char),comp);//注意n值必须与字符串长度保持一致
    printf("%s",a);
    return 0;
}


介绍一下strcmp(这个函数很好哦,可以判断两个字符串是否相等,相等就返回0),其库函数为string.h,作用为两个字符串串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止

下面举个例子说明

#include<string.h>
#include "stdio.h"
int main()
{
    char a[100],b[100];
    scanf("%s %s",a,b);//比较字符串a和b的大小(根据ASCII码值,返还ASCII差值,a大于b为正,a小于b为负)
    printf("%d",strcmp(a, b));
    
    
    
}

二维数组运用qsort排序

1

int cmp(const void * a, const void * b)
{
    const char* ca = *(const char* *)a;
    const char* cb = *(const char* *)b;
    int la = strlen(ca);
    int lb = strlen(cb);
 
    if (la == lb)
        return  strcmp(ca, cb);
    else
        return la - lb;
}

2

int cmp(const void *a,const void *b)
{
    int *c = (int *)a;
    int *d = (int *)b;
    if(*c != *d)
        return *c - *d;
    return *(d+1) - *(c+1);//在此只是对[x][2]长度比较
}

3

qsort对结构体进行排序

struct queue
{
    int start;
    int end;
}a[100];
int comp(const void*a,const void*b)
{
    struct queue *c,*d;
    c=(struct queue*)a;//强制转化
    d=(struct queue*)b;
    if(c->end<d->end)
        return -1;
    else if(c->end>d->end)
        return 1;
    else
        return 0;
}
然后再在主函数中运用qsort

qsort(a, n,sizeof(structqueue),comp);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值