sort与qsort的区别与联系
sort属于C++范畴,在algorithm头文件中,下面直奔主题,给大家一个清晰明了的认识.qsort有C,和C++两个版本.
| 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. 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的区别与联系的更多相关文章
- sort 与 qsort
很长一段时间搞不明白 sort 和 qsort 的区别,平时在写程序时习惯了使用 sort ,因为它用起来比 qsort 要简单的多 , 这里详细介绍一下 sort 与 qsort : 给出一个数组 ...
- sort与sorted的区别及实例
描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序方法2.用内置函数sorted进行排序(从2.4开始) so ...
- stl sort和qsort的使用
好不容易使用了下stl的qsort函数,顺便和sort函数一起总结下: 很多时候我们都需要用到排序. 例如: 1 #include <iostream> #include <algo ...
- sort与sorted的区别
描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序 方法2.用内置函数sorte ...
- C++中sort()及qsort() (不完整介绍)
在平时刷算法题和oj的时候,排序算法是最经常用到的算法之一:且在各类算法书的目录中 也通常是将各种排序算法放在最前面来讲,可见排序算法的重要性.可能许多人都在算法书中有学过冒泡.快速排序的方法,也都大 ...
- 算法学习笔记——sort 和 qsort 提供的快速排序
这里存放的是笔者在学习算法和数据结构时相关的学习笔记,记录了笔者通过网络和书籍资料中学习到的知识点和技巧,在供自己学习和反思的同时为有需要的人提供一定的思路和帮助. 从排序开始 基本的排序算法包括冒泡 ...
- python小知识,sort和serted的区别
列表对象sort()方法和内置sorted()函数的作用基本相同,但,不同的是sort会改变原有列表的顺序,而sorted不会 具体示例如下: """ create:20 ...
- (C++)STL排序函数sort和qsort的用法与区别
主要内容: 1.qsort的用法 2.sort的用法 3.qsort和sort的区别 qsort的用法: 原 型: void qsort(void *base, int nelem, int widt ...
- sort与qsort的异同
主要内容: 1.qsort的用法 2.sort的用法 3.qsort和sort的区别 qsort的用法: 原 型: void qsort(void *base, int nelem, int widt ...
随机推荐
- EZ 2017 01 07 t
这名字诡异(然而就是这样) 这次主要是yekehe和yu‘ao都来了,所以很开心的讨论(上了200). 但是,yu’ao dalao又AK了!(666666) 不过总体难度也不高,主要是T3没思路. ...
- async await使用
promise使用 var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(f ...
- Java过滤器与SpringMVC拦截器的差异学习笔记
学习摘录地址:http://blog.csdn.net/chenleixing/article/details/44573495 今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了 ...
- GitHub 新手教程 六,Git GUI 新手教程(3),从GitHub远端同步代码库
从GitHub把代码库下载到本地: 1,打开 GitGUI,单击我们之前克隆好的本地库: 2,按图片所示点击,同步远端代码: 3,出现如下提示后,点击“Close”: 4,上面只是把代码下载下来,还没 ...
- github添加ssh连接用户
最近打算用flask写一个自己的博客网站,打算把代码放在GitHub上,使用ssh访问.记录下GitHub配置ssh用户的流程. 1.在本地电脑或云服务器上生成ssh公钥和私钥,window下可以进入 ...
- Unity关于方法事件生命周期官方文档
http://docs.unity3d.com/Manual/ExecutionOrder.html 一.组件运行的基本顺序 下图中创建类的顺序为A,B,C,A1,二运行的结果为A1,B,C,A. 可 ...
- Windows 7上安装配置TensorFlow-GPU运算环境
Windows 7上安装配置TensorFlow-GPU运算环境 1. 概述 在深度学习实践中,对于简单的模型和相对较小的数据集,我们可以使用CPU完成建模过程.例如在MNIST数据集上进行手写数字识 ...
- [转载] JVM 内存结构
转载自:http://gityuan.com/2015/10/17/java-memory/
- Java 8 新特性---------Stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象 ...
- Vim操作指南
vim具有6种基本模式和5种派生模式. 基本模式 普通模式 插入模式 可视模式 选择模式 命令行模式 Ex模式 派生模式 操作符等待模式 插入普通模式 插入可视模式 插入选择模式 替换模式 1.移动光 ...