关于C++排序函数sort和qsort用法

    xiaoxiao2021-03-25  107

    用于C++中,对给定区间所有元素进行排序。

    头文件是#include <algorithm>

    sort函数见下表:

    函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置对应的元素 is_sorted 判断一个区间是否已经排好序 partition 使得符合某个条件的元素放在前面 stable_partition 相对稳定的使得符合某个条件的元素放在前面 sort函数有三个参数

    1.要排序的数组的起始地址。

    2.要排序数组的结束地址;

    3.排序的方法,即排序是按照升序还是降序。默认的排序方法是从小到大升序排序。

    MSDN中的定义:

    template<class RanIt> void sort(RanIt first, RanIt last); //--> 1) template<class RanIt, class Pred> void sort(RanIt first, RanIt last, Pred pr); //--> 2)

    可以自己写一个cmp函数,按照特定意图进行排序。如下按照降序顺序进行排序

    bool cmp(const int &a,const int &b)

    {

    if(a > b)

    return 1;

    else

    return 0;

    }

    用法:sort(a,a+n,cmp);//对数组a进行降序排序。

    int cmp( const POINT &a, const POINT &b ){ if( a.x < b.x ) return 1; else if( a.x == b.x ){ if( a.y < b.y ) return 1; else return 0; } else return 0; } sort(a,a+n,cmp); 是先按x升序排序,若x值相等则按y升序排序。

    C++标准库提供了上述的功能,sort函数的第三个参数可以用如下语句告诉你采用的排序方法。

    less<数据类型>()//从小到大排序

    greater<数据类型>()//从大到小排序

    对int数组排序可用,sort(a,a+n,less<int>())

    对字符数组排序可用,sort(str,str+str.length(),less<char>())

    C中的qsort是我刚学编程最常用的排序方法,附上qsort的使用方法:

    #include <stdlib.h>

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

    各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针

    其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,compare是一个比较函数。

    比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。

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

    其中comp函数应写为:

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

    {

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

    }

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

    以下为compare函数原型 //comp compare( (void *) & elem1, (void *) & elem2 ); Compare 函数的返回值 描述 < 0 elem1将被排在elem2前面 0 elem1 等于 elem2 > 0 elem1 将被排在elem2后面 对字符串进行排序

    int  Comp( const  void *p1, const  void *p2) { return  strcmp (( char *)p2,( char *)p1); } int  main() { char  a[MAX1][MAX2]; initial(a); qsort (a,lenth, sizeof (a[0]),Comp); }

    转载请注明原文地址: https://ju.6miu.com/read-10402.html

    最新回复(0)