排序方法之标准库中的快排 qsort ()函数

C标准库qsort()函数的用法(快排)

 使用快速排序例程进行排序

头文件:stdlib.h

用 法: void qsort(void *base, int  nelem, int  width, int (*fcmp)(const void*,const void *));

参数: 1 待排序数组首地址

2 数组中待排序元素数量

3 各元素的占用空间大小

4 指向函数的指针,用于确定排序的顺序

其中comp函数应写为:

int comp ( const void *a, const void *b )

{

   return * ( int * ) a - * ( int * ) b;

}

上面是由小到大排序,return*(int *)b-*(int *)a; 为由大到小排序。

对一个二维数组进行排序:

int a[1000][2]; 其中按照a[0]的大小进行一个整体的排序,其中a[1]必须和a[0]一起移动交换。

qsort ( a, 1000, sizeof ( int ) * 2, comp);

int comp ( const void *a, const void *b )

{

   return ( ( int * ) a ) [0] - ( ( int * ) b ) [0];

}

qsort函数代码示例

#include<stdio.h>

#include<stdlib.h>

#define nmemb 7

int compar(const void *a,const void *b)

  {

   //返回负数表示从达到小排列

    //返回正数表示从达到小排列

    int *aa =(int *)a,*bb=(int *)b;

     printf("%d %d",*aa,*bb);

    if(*aa > *bb) return 1;

     if(*aa == *bb) return 0;

   if(*aa < *bb) return -1;

  return 1;

  }

int main()

{

  int a[10]={10,9,6,3,8};

  int i=0;

 qsort(a,10,sizeof(int ),compar);

 for( i=0;i<10;i++)

 printf("%d ",a[i]);

 return 0;

}

运用此函数还可以实现结构体和字符串的排序,在这里就不写了,百度上可以找到很多这样的例子啊!

原文地址:https://www.cnblogs.com/riskyer/p/3249438.html