使用qsort函数排序各种类型的数据

mac2024-10-06  61

今天我们介绍一下qsort函数,qsort是编译器函数库自带的快速排序函数。

使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷。

qsort 的函数原型是

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针 其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。qsort(a,1000,sizeof(int),comp);

2

3

4

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

{

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

}

Comp 函数编写作用是由小到大排序,这里只是需要comp函数返回正值、负值或者零即可。

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int cmp1(const void * a, const void * b) { return (*( int*)a - *( int*)b); //a>b 返回正值 } int cmp2(const void * a, const void *b) { return(*( char*)a - *( char*)b); } void main(void) { int i; int a[ 10] = { 9, 1, 3, 2, 7, 5, 6, 4, 8, 0 }; char b[ 10] = { 'i', 'g', 'c', 'e', 'd', 'f', 'b', 'h', 'a', 'j' }; qsort(a, 10, sizeof( int), &cmp1); //对于函数指针(指向函数的指针),直接传入函数名和函数名进行& //运算都是可以的,因为在调用函数时也是取的函数的地址 所以上下两种调用函数的方式都是可以的 qsort(b, 10, sizeof( char), cmp2); for (i = 0; i< 10; i++) printf( "%d ", a[i]); printf( "\n"); for (i = 0; i< 10; i++) printf( "%c ", b[i]); printf( "\n"); system( "pause"); }

qsort(a, 10, sizeof(int), &cmp1); 这里就是对数组a进行排序,之后10代表着需要对a数组中的十个元素进行排序,第三个sizeof(int)是在排序的时候每次需要操作的字节,再往后的函数名cmp是对数组a排序的法则,是正序还是倒序。

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

在排序函数中所有的参数前边都加了const 为的是防止你在操作过程中对传入数据无意间发生更改。

  在使用qsort函数时需要含有头文件#include<stdlib.h>  

 

对于其他类型的数据也很简单的就可以进行替换。

最新回复(0)