C 标准库qsort函数的使用

快速排序(quick sort)是最有效的排序算法之一。

C实现的快速排序算法的函数名为qsort(), qsort()函数对数据对象数据进行排序。其函数原型在头文件stdlib.h中

其原型为:

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *,const void *));

 第一个参数为指向要排序的数组头部指针,因为任何数据类型的指针可以转化成void类型指针,故qsort()的第一个参数可以指向任何类型的数组;

第二个参数为要排序的元素数量;

第三个参数为数组中数据对象的大小。因为qsort()将第一个参数转换为void指针,所以会失去每个数组元素的大小信息,为了补充该信息必须把数据对象的大小明确告诉qsort();

第四个参数为指向函数的指针,被指向的函数用于确定排序的规则。该函数接受两个参数,分别为指向进行比较的两个元素,

如果第一个元素大于第二个元素返回正数,小于返回负数,等于返回0;

 

下面的示例程序创建了一个由随机浮点数组成的数组,并对该数组排序。

/*
 *  qsort函数的使用
 *  函数原型 void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *,const void *));
 */
#include <stdio.h>
#include <stdlib.h>

#define NUM 40
void fillarray(double ar[], int n);
void showarray(const double ar[], int n);
int mycomp(const void *p1, const void *p2);

int main(void)
{
    double ar[NUM];
    fillarray(ar, NUM);
    printf("Random List:\n");
    showarray(ar, NUM);
    qsort(ar, NUM, sizeof(double), mycomp);//函数调用
    printf("\nSorted List:\n");
    showarray(ar, NUM);

    return 0;
}

//产生随机数数组
void fillarray(double ar[], int n)
{
    int index;

    for (index = 0; index < n; index++)
    {
        ar[index] = (double)rand() / ((double)rand() + 0.1);
    }
}

//打印数组
void showarray(const double ar[], int n)
{
    int index;

    for (index = 0; index < n; index++)
    {
        printf("%9.4f ", ar[index]);
        if (index % 6 == 5)
        {
            putchar('\n');
        }
    }
}

//排序规则
int mycomp(const void *p1, const void *p2)
{
    const double *a1 = (const double *)p1;
    const double *a2 = (const double *)p2;

    if (*a1 < *a2)
    {
        return -1;
    }
    else if (*a1 == *a2)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

 输出结果:

Random List:
   0.0022    0.2390    1.2191    0.3910    1.1021    0.2027
   1.3835   20.2830    0.2508    0.8880    2.2179   25.4866
   0.0236    0.9308    0.9911    0.2507    1.2802    0.0939
   0.9760    1.7217    1.2054    1.0326    3.7892    1.9635
   4.1137    0.9241    0.9971    1.5582    0.8955   35.3798
   4.0579   12.0460    0.0096    1.0109    0.8506    1.1529
   2.3614    1.5876    0.4825    6.8749
Sorted List:
   0.0022    0.0096    0.0236    0.0939    0.2027    0.2390
   0.2507    0.2508    0.3910    0.4825    0.8506    0.8880
   0.8955    0.9241    0.9308    0.9760    0.9911    0.9971
   1.0109    1.0326    1.1021    1.1529    1.2054    1.2191
   1.2802    1.3835    1.5582    1.5876    1.7217    1.9635
   2.2179    2.3614    3.7892    4.0579    4.1137    6.8749
  12.0460   20.2830   25.4866   35.3798

 

 

 

 

你可能感兴趣的:(C++,c,算法,C#)