c语言的qsort排序函数

qsort()函数是 C 库中实现的快速排序算法,包含在 stdlib.h 头文件中,可实现对多种数据结构的排序,其时间复杂度为 O(nlogn)。函数原型如下:

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

这个函数需要个参数。

第一个参数是需要排序的数组的基地址,因为是 void * 类型,所以此函数可以给任何类型的数组进行排序;

第二个参数是需要排序的元素数量(size_t 是一种特别的数据类型,可以近似理解为 int 型);

第三个单个数组元素的大小,即字节数,例如 int 型就是 4 或者 sizeof(int) (sizeof 的返回值类型就是 sizeof),因为为了适用于各种数据结构,第一个参数将指向数组的指针强转成了 void * 类型,也即此时函数并不知道将要进行排序的数组内存储的是什么元素,因此我们需要显式地告诉它单个元素所占的长度;

第四个参数是一个指向函数的指针,其作用是规定排序的规则,即按照什么样的方式进行排序。

例子:

int compare(const void* a, const void* b) {
    int a1 = *(int*)a, b1 = *(int*)b;
    return a1 - b1;
}

bool core(int* nums, int numsSize) {
    qsort(nums, numsSize, sizeof(int), compare);
    for (int i = 0; i < numsSize - 1; i++) {
        if (nums[i] == nums[i + 1]) {
            return true;
        }
    }
    return false;
}

最重要的是第四个参数,比较函数的定义,qsort函数会依据你定义的比较函数返回值进行排序。

**如果想升序,就定义if(a<=b) return -1;
**如果想降序,就定义if(a>=b) return 1;

简化:if(*a<=*b)
				return *a-*b;//升序,返回负数
	 if(*a>=*b)
	 			return *a-*b;//降序,返回正数

附加:直接使用qsort函数进行排序一般比自己写的快速排序更快,因为在stdlib.h头文件中qsort已经被优化了很多遍,比如:到某一条件即跳出循环等判断减少了消耗。。。。所以,如果自己写的快排超时了,可以考虑使用提供的qsort函数或者更高效的排序算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值