sort属于C++范畴,在algorithm头文件中,下面直奔主题,给大家一个清晰明了的认识.qsort有C,和C++两个版本.

qsort的compare函数原型 //comp ,也就说,如果the first < the second 返回-1,;如果the first > the second 返回1;如果the first == the second 返回0.,排序结果就表现为升序
comp - comparison function which returns ​a negative integer value if the first argument is less than the second,

a positive integer value if the first argument is greater than the second and zero if the arguments are equal.
The signature of the comparison function should be equivalent to the following:

int cmp(const void *a, const void *b);

The function must not modify the objects passed to it and must return consistent results when called for the same objects, regardless of their positions in the array.

 #include <algorithm>
#include <functional>
#include <array>
#include <iostream>
#include <limits.h>
using namespace std;
int cmpself(const void *a, const void *b){
int arg1 = *static_cast<const int*>(a);
int arg2 = *static_cast<const int*>(b); if(arg1 < arg2) return -;
if(arg1 > arg2) return ;
return ;
//return arg1 < arg2;//如果将上面的改为这个呢?降序排列
//return arg1 > arg2;//升序
}
int main()
{
//C++ sort 排序规则:前面元素大于后面元素,就返回降序结果;否则,返回升序结果.
std::array<int, > s = {, , , , , , , , , }; // sort using the default operator< sort默认升序排列
std::sort(s.begin(), s.end());
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n'; // sort using a standard library compare function object
//the former is greater than the later,降序排列
std::sort(s.begin(), s.end(), std::greater<int>());
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n'; // sort using a custom function object
struct {
bool operator()(int a, int b)
{
return a < b;//升序排列
}
} customLess;
std::sort(s.begin(), s.end(), customLess);
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n'; // sort using a lambda expression
std::sort(s.begin(), s.end(), [](int a, int b) {
return b < a; //降序排列
});
for (auto a : s) {
std::cout << a << " ";
}
std::cout << '\n'; //c++ qsort
int arr[] = {-, , , -, , INT_MIN+, };
constexpr std::size_t elesize = sizeof(arr[]);
constexpr std::size_t size = sizeof(arr) / sizeof(arr[]); std::qsort(arr, size, sizeof(arr[]), [](const void* a, const void* b)
{
int arg1 = *static_cast<const int*>(a);
int arg2 = *static_cast<const int*>(b);
//return arg1 < arg2; //error
if(arg1 < arg2) return -;
if(arg1 > arg2) return ;//需要注意的是,无论是C还是C++中的qsort,
return ; // return (arg1 > arg2) - (arg1 < arg2); // possible shortcut
// return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)
}); for(int ai : arr)
std::cout << ai << ' ';
std::cout << '\n';
std::qsort(arr, size, sizeof(arr[]), cmpself);
for(int ai : arr)
std::cout << ai << ' ';
std::cout << '\n';
}

sort与qsort的区别与联系的更多相关文章

  1. sort 与 qsort

    很长一段时间搞不明白 sort 和 qsort 的区别,平时在写程序时习惯了使用 sort ,因为它用起来比 qsort 要简单的多 , 这里详细介绍一下 sort 与 qsort : 给出一个数组 ...

  2. sort与sorted的区别及实例

    描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序方法2.用内置函数sorted进行排序(从2.4开始) so ...

  3. stl sort和qsort的使用

    好不容易使用了下stl的qsort函数,顺便和sort函数一起总结下: 很多时候我们都需要用到排序. 例如: 1 #include <iostream> #include <algo ...

  4. sort与sorted的区别

    描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 :         方法1.用对List的成员函数sort进行排序        方法2.用内置函数sorte ...

  5. C++中sort()及qsort() (不完整介绍)

    在平时刷算法题和oj的时候,排序算法是最经常用到的算法之一:且在各类算法书的目录中 也通常是将各种排序算法放在最前面来讲,可见排序算法的重要性.可能许多人都在算法书中有学过冒泡.快速排序的方法,也都大 ...

  6. 算法学习笔记——sort 和 qsort 提供的快速排序

    这里存放的是笔者在学习算法和数据结构时相关的学习笔记,记录了笔者通过网络和书籍资料中学习到的知识点和技巧,在供自己学习和反思的同时为有需要的人提供一定的思路和帮助. 从排序开始 基本的排序算法包括冒泡 ...

  7. python小知识,sort和serted的区别

    列表对象sort()方法和内置sorted()函数的作用基本相同,但,不同的是sort会改变原有列表的顺序,而sorted不会 具体示例如下: """ create:20 ...

  8. (C++)STL排序函数sort和qsort的用法与区别

    主要内容: 1.qsort的用法 2.sort的用法 3.qsort和sort的区别 qsort的用法: 原 型: void qsort(void *base, int nelem, int widt ...

  9. sort与qsort的异同

    主要内容: 1.qsort的用法 2.sort的用法 3.qsort和sort的区别 qsort的用法: 原 型: void qsort(void *base, int nelem, int widt ...

随机推荐

  1. CS299笔记:广义线性模型

    指数分布族 我们称一类分布属于指数分布族(exponential family distribution),如果它的分布函数可以写成以下的形式: \[ \begin{equation} p(y;\et ...

  2. 异常 java.lang.IllegalArgumentException: Result Maps collection already contains value

    这是因为用了一次以上(多次)mbg导致sql映射文件堆积导致的异常,删除对应的sql映射文件,然后重新生成即可. Caused by: java.lang.IllegalArgumentExcepti ...

  3. django请求的生命周期

    1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...

  4. LeetCode 3Sum (Two pointers)

    题意 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all ...

  5. Java设计模式之适配器设计模式(项目升级案例)

    今天是我学习到Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一 ...

  6. EOS开发基础之二:使用cleos命令行客户端操作EOS(钱包wallet基础操作)

    不知道下边这一段英文你们是不是能看懂,如果看不懂那就算了,我就是转过来随便看看的. 总之你记住nodeos.cleos和keosd这三个工程十分重要就行了,回头咱们的研究都从这三个工程杀进去. EOS ...

  7. ubuntu 下配置 开发环境

    1. apache: sudo apt-get install apache2 安装好输入网址测试所否成功: http://localhost 2. mongo 已经安装好了 版本:2.4.8 ref ...

  8. Scalable Object Detection using Deep Neural Networks译文

    原文:https://arxiv.org/abs/1312.2249

  9. java实现图像的直方图均衡以及灰度线性变化,灰度拉伸

    写了四个方法,分别实现图片的灰度化,直方图均衡,灰度线性变化,灰度拉伸,其中好多地方特别是灰度拉伸这一块觉得自己实现的有问题,请大大们多多指教. import java.awt.Image; impo ...

  10. 第四次WBS

    分解原则 1.将主体目标逐步细化分解,最底层的日常活动可直接分派到个人去完成: 2.每个任务原则上要求分解到不能再细分为止: 3.日常活动要对应到人.时间和资金投入. 二.任务分解的方法 1.采用树状 ...