c语言库函数 qsort(快速排序函数)

来源:互联网 发布:淘宝网客户端官方下载 编辑:程序博客网 时间:2024/06/06 14:18

今天学习了c语言的库函数 qsort,在此记下它的用法。

相关资料:

来自百度百科:
功 能: 使用快速排序例程进行排序
头文件:stdlib.h
用 法: void qsort(void base,int nelem,int width,int (*fcmp)(const void ,const void *));
参数: 1 待排序数组首地址
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序
比较函数
以下为compare函数原型 //comp
compare( (void ) & elem1, (void ) & elem2 );

Compare 函数的返回值 描述 < 0 elem1将被排在elem2前面 = 0 elem1 等于 elem2 > 0 elem1 将被排在elem2后面

例1:对一维数组进行排序

#include <stdio.h>#include <stdlib.h>//比较函数 int comp(const void *a,const void *b){    return *((int *)a)-*((int *)b);}int main(){    int arr[10]={44,3,23,1,76,8,3,2,88,4};    int i=0;    //调用qsort     qsort(arr,10,sizeof(int),comp);    printf("\n打印数组:\n");    for(i=0;i<10;i++)    {        printf("%2d\n",arr[i]);    }    return 0;}

运行结果:
这里写图片描述
例2:对二维数组进行排序

#include <stdio.h>#include <stdlib.h>//比较函数 int comp(const void *a,const void *b){    return ((int *)a)[0]-((int *)b)[0];//对二维数组排序的比较函数 }int main(){    //对二维数组进行排序     int arr[5][3]={{4,2,6},{44,3,2},{4,2,2},{2,11,3},{2,4,3}};    int i,j;    printf("排序前:\n\n");    for(i=0;i<5;i++)    {        printf("%2d %2d %2d\n",arr[i][0],arr[i][1],arr[i][2]);    }    printf("排序后:\n\n");    qsort(arr,5,sizeof(int)*3,comp);    for(i=0;i<5;i++)    {        printf("%2d %2d %2d\n",arr[i][0],arr[i][1],arr[i][2]);    }    return 0;}

运行结果:
这里写图片描述

例3:对结构体进行排序

#include <stdio.h>#include <stdlib.h>//结构体 struct rect{    int l;    int w;    int h;}R[4];//比较函数 (比较矩形从小到大,比较顺序为长-宽-高)int comp(const void *a,const void *b){    struct rect *c=(struct rect *)a;    struct rect *d=(struct rect *)b;    if(c->l!=d->l)    {        return c->l<d->l?-1:1;    }    else    {        if(c->w!=d->w)        {            return c->w<d->w?-1:1;        }        else        {            return c->h<d->h?-1:1;        }    }}void initRect(){    R[0].l=34;    R[0].w=3;    R[0].h=12;    R[1].l=4;    R[1].w=30;    R[1].h=55;    R[2].l=34;    R[2].w=33;    R[2].h=12;    R[3].l=34;    R[3].w=33;    R[3].h=1;}int main(){    int i,j;    initRect();    printf("排序前:\n\n");    for(i=0;i<4;i++)    {        printf("%2d %2d %2d\n",R[i].l,R[i].w,R[i].h);    }    printf("排序后:\n\n");    qsort(R,4,sizeof(int)*3,comp);    for(i=0;i<4;i++)    {        printf("%2d %2d %2d\n",R[i].l,R[i].w,R[i].h);    }    return 0;}

运行结果:
这里写图片描述

1 0
原创粉丝点击