您的位置:首页 > 其它

qsort(快速排序)用法

2014-12-10 20:29 127 查看
首先需要写一个比较的函数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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: