C/C++:qsort和sort函数

二者都是基于快速排序算法,使用上有些区别

主要内容
  1. qsort用法
  2. sort用法
  3. 区别
qsort用法

原型
void qsort(void* base, size_t num, size_t size, int (*compare)(const void* ,const void*))
参数
1.待排序数组的首地址,如数组名;
2.数组中待排序元素数量;
3.数组元素所占空间大小;
4.比较函数指针,函数接受两个待比较项的指针,一般要类型转换

一、对int数组排序
int nums[100];
int cmp(const void* p1, const void* p2) {
     const int* a1 = (const int*)p1;    //使用指向int类型的指针访问值
     const int* a2 = (const int*)p2;
     return *a - *b;
}//升序排列;如果降序,改为*b - *a
qsort(num, 100, sizeof(int), cmp);
二、对char类型排序(与int类似)
char word[100];
int cmp(const void* p1, const void* p2) {
     const char* a1 = (const char*)p1;    //使用指向int类型的指针访问值
     const char* a2 = (const char*)p2;
     return *a - *b;
}//升序排列;如果降序,改为*b - *a
qsort(num, 100, sizeof(char), cmp);
三、对double(float)类型排序(注意返回值是int类型)
double nums[100];
int cmp(const void* p1, const void* p2) {
     const double* a1 = (const double*)p1;    //使用指向int类型的指针访问值
     const double* a2 = (const double*)p2;
    // return *a - *b;  不能这样写,结果仍是double
    if(*a > *b){
        return 1;           
    }
    else if(*a == *b){
        return 0;
    }
    else{
       return -1;
    }
}//升序排列;
qsort(num, 100, sizeof(char), cmp);
四、对结构体类型一级排序

struct nums {
	double data;
	int other;
}s[100];
//按照结构体中变量data的大小给结构体数组升序排序
int cmp(const void* p1, const void* p2) {
	return *((struct nums*)p1).data > *((struct nums*)p2)->data ? 1 : -1;
}
qsort(s, 100, sizeof(s[0]), cmp);
五、对二维数组二级排序

int s[100][2];  //假设已经初始化好
//对s[i]排序,首先按s[i]中第一个参数升序排列,如果参数相等,再按照第二个参数升序排列
int cmp(const void* p1, const void* p2) {
	int* a1 = *(int**)p1, * a2 = *(int**)p2;     //将p1,p2强制转化为何种类型,应该和比较数组的维度相同
	if (a1[0] == a2[0]) return a1[1] - a2[1];
	return a1[0] - a2[0];
}
qsort(s, 100, sizeof(int*), cmp);
sort用法

原型
template<class RanIt> void sort(RanIt fisrt, RanIt last)
template<class RanIt, class Pred> void sort(RanIt fisrt, RanIt last, Pred pr)

bool compare(int a,int b)
{
  return a>b; //降序排列,如果改为return a<b,则为升序
}
sort(*a,*b,cmp);

sort也可以以迭代器(vector、string等迭代器)作为参数,默认升序排列

vector<int>nums //假设已经初始化好
sort(nums.begin(), nums.end());
qsort和sort的区别

1.sort是C++中改进后的排序函数,支持array,vector,deque三种容器,因为它们支持的迭代器为随机访问迭代器。
2.如果对容器中指定区域的元素做默认升序排序,则元素类型必须支持<小于运算符,如果不支持,需要自定义比较函数,传入第三个参数。
标准库自带函数:functional提供了一堆基于模板的比较函数对象:equal_to、not_equal_to、greater、greater_equal、less、less_equal。
升序:sort(begin,end,less()); 降序:sort(begin,end,greater()).
qsort必须自定义比较函数,也比较灵活。
3.cmp函数比较时,一般来说,qsort用“-”,而sort用”>”。
4.从函数原型就可看出,qsort返回值为int, sort返回值为bool,经常在定义为类内私有,static bool

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值