您的当前位置:首页正文

C语言qsort函数用法

来源:九壹网
C语⾔qsort函数⽤法

qsort函数简介

  排序⽅法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是⽬前公认的⼀种⽐较好的排序算法。因为他速度很快,所以系统也在库⾥实现这个算法,便于我们的使⽤。 这就是qsort函数(全称quicksort)。它是ANSI C标准中提供的,其声明在stdlib.h⽂件中,是根据⼆分法写的,其时间复杂度为n*log(n)

  功能: 使⽤快速排序例程进⾏排序  头⽂件:stdlib.h

  ⽤法: void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));   参数: 1 待排序数组,排序之后的结果仍放在这个数组中      2 数组中待排序元素数量

     3 各元素的占⽤空间⼤⼩(单位为字节)

   4 指向函数的指针,⽤于确定排序的顺序(需要⽤户⾃定义⼀个⽐较函数)

  qsort要求提供⼀个⾃⼰定义的⽐较函数。⽐较函数使得qsort通⽤性更好,有了⽐较函数qsort可以实现对数组、字符串、结构体等结构进⾏升序或降序排序。

  如⽐较函数 int cmp(const void *a, const void *b) 中有两个元素作为参数(参数的格式不能变),返回⼀个int值,⽐较函数cmp的作⽤就是给qsort指明元素的⼤⼩是怎么⽐较的。

qsort中⼏种常见的⽐较函数cmp

⼀、对int型数组排序

int num[100];

int cmp_int(const void* _a , const void* _b)  //参数格式固定{

int* a = (int*)_a; //强制类型转换 int* b = (int*)_b; return *a - *b;  }

qsort(num,100,sizeof(num[0]),cmp_int);

  可见,参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从⼩到⼤),如果想降序排列返回*b-*a即可。

⼆、对char型数组排序(同int类型)

char word[100];

int cmp_char(const void* _a , const void* _b)  //参数格式固定{

char* a = (char*)_a; //强制类型转换 char* b = (char*)_b; return *a - *b;  }

qsort(word,100,sizeof(word[0]),cmp_char);

三、对double型数组排序

double in[100];

int cmp_double(const void* _a , const void* _b)  //参数格式固定{

double* a = (double*)_a; //强制类型转换 double* b = (double*)_b;

return *a > *b ? 1 : -1;  //特别注意}

qsort(in,100,sizeof(in[0]),cmp_double);

  在对浮点或者double型的⼀定要⽤三⽬运算符,因为要是使⽤像整型那样相减的话,如果是两个很接近的数则可能返回⼀个很⼩的⼩数(⼤于-1,⼩于1),⽽cmp的返回值是int型,因此会将这个⼩数返回0,系统认为是相等,失去了本来存在的⼤⼩关系

四、对字符串进⾏排序

char word[100][10];

int cmp_string(const void* _a , const void* _b)  {

char* a = (char*)_a;  //强制类型转换 char* b = (char*)_b; return strcmp(a,b);}

qsort(word,100,sizeof(word[0]),cmp_string);

//参数格式固定

因篇幅问题不能全部显示,请点此查看更多更全内容

Top