C语言的qsort函数

学了这么久都不知道C语言有这个函数(其实是因为基本没写过C,除了学程序设计的时候。。)

qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) ) 
其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。默认从小到大。

其中调用的算法是快速排序,并且是优化过的三路快排(划分为小于基准值、等于基准值、大于基准值的)。

其中第四个参数是一个函数指针,返回值是int,若需要递增排序:参数1>参数2应该返回正数,参数1<参数2返回负数,参数1==参数2返回0。

比如:

int cmp(const void* a,const void* b){
    return *(int*)(a)-*(int*)(b);
    }
int main(void)
{

    vector<int> p={3,432,52,12,5,3456,4523,43};
    qsort(&p[0],8,4,cmp);
    for(int x:p){
        cout<<x<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/FdWzy/p/12520991.html

时间: 2024-10-14 23:51:22

C语言的qsort函数的相关文章

C语言利用qsort()函数实现排序

引用#include<stdlib.h>头文件 qsort()括号里面有4个参数 第一个参数是将要排序的数组名array: 第二个参数是将要排序的数量n: 第三个参数是每个要排序的参数的大小xizeof(array[o]): 第四个参数是自己写的一个比较函数comp: 若排序的是int类型的数组 升序: int comp(const void*a,const void*b)//用来做比较的函数.{    return *(int*)a - *(int*)b;} 降序: int comp(con

C语言qsort函数算法性能测试

对于该算法的复杂性.一个直接的方法是测量的一定量的算法级数据的执行时间的感知. 随着C语言提供qsort对于示例.随着100一万次的数据,以测试其计算量.感知O(nlg(n))时间成本: C码如下面: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 //int (*Comp)(const void *,const void *) int compare(const vo

C语言qsort函数用法

qsort函数简介 排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等. 看名字都知道快速排序是目前公认的一种比较好的排序算法.因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用. 这就是qsort函数.它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n) 功能: 使用快速排序例程进行排序 头文件:stdlib.h 用法:  void qsort(void* base,size_t num,size_t width,in

qsort函数、sort函数 (精心整理篇)

先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分. 具体介绍:-^^ void qsort( void *base, size_t n

qsort函数、sort函数【转】

http://blog.163.com/yuhua_kui/blog/static/9679964420142195442766/ 先说明一下:qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划

qsort函数

C语言有自有的qsort函数. 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 这个函数必须要自己写比较函数,即使要排序的元素是int,float一类的C语言基础类型. #include<s

qsort函数、sort函数 (精心整理篇)(转载)

qsort函数.sort函数 (精心整理篇) 先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分. 具体介绍:-^^ void qsor

qsort函数、sort函数

先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分. 具体介绍:-^^ void qsort( void *base, size_t n

C语言备忘录——qsort

写了这么久的排序感觉还是用现成的最舒服.其实C语言其实自己带了一个快速排序在stdlib 库里,但是其函数调用的接口过于复杂,所以让人望而却步.为了加深自己的记忆,所以写下这篇博客 先来看一下函数原型 _CRTIMP void __cdecl qsort(void*, size_t, size_t, int (*)(const void*, const void*)) 看上去就很复杂 其实 CRTIMP仅仅是一个宏定义(不明白也没啥) 其实际意义如下 C -- C语言 R -- run 运行 T