C++中sort()及qsort() (不完整介绍)
在平时刷算法题和oj的时候,排序算法是最经常用到的算法之一;且在各类算法书的目录中 也通常是将各种排序算法放在最前面来讲,可见排序算法的重要性。可能许多人都在算法书中有学过冒泡、快速排序的方法,也都大致了解其原理;实际应用时,冒泡排序是最为简单的,当然复杂度也是最高的.....(就如高德纳所说:"冒泡排序除了它迷人的名字和导致了某些有趣的理论问题这一事实之外,似乎没有什么值得推荐的");快排在理想情况下可以说是最高效的了(nlogn)。但快速排序并不像冒泡排序那样好理解和记忆,每次都需要自己回忆并把模板代码敲上去...想想就是一件挺麻烦的事。不过,还好在C++中有快排函数现成的可以用...想想就是件极好的事。
现在对sort()和qsort()的一些用法做下介绍,但讲的都并不完整,只是把比赛时常用的一些内容罗列出来。
sort函数:其实sort()并不能叫做快速排序,而应该说成智能排序;它正常情况下,会使用快排,但是发现快排恶化的话,会自动调整成其他排序来辅助。是最高效的排序。在C++的algorithm库中。
sort(begin,end);
/*在[begin, end]中的元素进行排序按升序排列
sort()默认是按升序排序,如果要按降序排序,还需自己编写一个比较函数来实现 */
eg. :
int _main()
{
int a[20],i;
for(i=0;i<20;i++)
cin>>a[i];
sort(a,a+20); //按升序排序
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
这里的排序是升序的,那如果要降序的该怎么办呢?下面给出自己编写比较函数来实现的代码:
int cmp(int a,int b)
{
return a<b; //升序排列;改为return a>b,则为降序 } int main()
{
int a[20],i;
for(i=0;i<20;i++)
cin>>a[i];
sort(a,a+20,cmp);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
其实只是为了实现对整型和实型数组的升序、降序排序,可以有更简单的方法,无需自己再编函数,因为标准库里有现成的了,它提供了好些基于模板的比较函数对象,可以直接用的了;这里要用到的是greater<data_type>和less<data_type>。
- 升序:sort(begin,end,less<data-type>());
- 降序:sort(begin,end,greater<data-type>());
int main()
{
int a[20],i;
for(i=0;i<20;i++)
cin>>a[i];
sort(a,a+20,less<int>());//如果要按降序,就改为greater<int>()
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}
下面是qsort():
qsort(quicksort)根据你给的比较函数给一个数组快速排序,是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。
qsort和compare的用法如下:
void qsort( void *base, size_len, size_data, int compare); int compare (const void *elem1, const void *elem2 ) ;
compare函数:
int compare(const void *a , const void *b ) {
return *(int *)a - *(int *)b; //升序排序 //return *(int *)b - *(int *)a; //降序排序 }
上面是对Int型的排序,如果是字符型,就把int换为char。而double型的为下:
int cmp(const void*a,const void*b)
{
return *(double*)a>*(double*)b?:-;//升序 //return *(double*)b>*(double*)a?1:-1; 降序
}
C++中sort()及qsort() (不完整介绍)的更多相关文章
- c++中sort()及qsort()的使用方法总结
当并算法具体解释请见点我 想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 ...
- c++中sort()及qsort()的用法总结
当并算法详解请见点我 想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描 ...
- C++中sort()函数使用介绍
sort()简介 为什么选择使用sort() 在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间.而且我们还需要根据需要去选择相关的排序方法: ...
- 算法学习笔记——sort 和 qsort 提供的快速排序
这里存放的是笔者在学习算法和数据结构时相关的学习笔记,记录了笔者通过网络和书籍资料中学习到的知识点和技巧,在供自己学习和反思的同时为有需要的人提供一定的思路和帮助. 从排序开始 基本的排序算法包括冒泡 ...
- sort 与 qsort
很长一段时间搞不明白 sort 和 qsort 的区别,平时在写程序时习惯了使用 sort ,因为它用起来比 qsort 要简单的多 , 这里详细介绍一下 sort 与 qsort : 给出一个数组 ...
- nginx基本配置与参数说明以及Nginx中的upstream轮询机制介绍
转自:http://blog.csdn.net/happydream_c/article/details/54943802 一.nginx简介 Nginx (发音为[engine x])专为性能优化而 ...
- 【重温基础】JS中的常用高阶函数介绍
Ps. 晚上加班到快十点,回来赶紧整理整理这篇文章,今天老大给我推荐了一篇文章,我从写技术博客中收获到了什么?- J_Knight_,感受也是很多,自己也需要慢慢养成记录博客的习惯,即使起步艰难,难以 ...
- SQL 必知必会笔记--完整介绍sql技巧
PS:完整介绍数据处理,表结构操作,视图,事务处理,存储过程,约束,索引,游标,触发,数据库安全等sql技巧 目录 数据处理 增:插入数据+复制表 删:删除行数据+删除指定列数据 改:更新数据 查:基 ...
- java中的compareto方法的详细介绍
java中的compareto方法的详细介绍 Java Comparator接口实例讲解(抽象方法.常用静态/默认方法) 一.java中的compareto方法 1.返回参与比较的前后两个字符串的as ...
随机推荐
- Blue Jeans(串)
http://poj.org/problem?id=3080 寻找最长公共子串..暴搜的.. #include<stdio.h> #include<string.h> int ...
- 2-SAT的小总结(POJ 3683 POJ 3207)
记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0&l ...
- POJ 2688 Cleaning Robot
题意: 给你一个n*m的图.你从'o'点出发,只能走路(图中的'.')不能穿墙(图中的'x'),去捡垃圾(图中的' * ')问最少走多少步能捡完所有垃圾,如有垃圾捡不了,输出-1. 思路: 有两个思路 ...
- C#微信公众号的开发——服务配置
最近因为需要用C#开发微信公众号的一些功能,记录一下开发公众号的一些坑..... 首先先介绍一下,微信公众号的官方文档.虽然这个文档我感觉比较糙,但是还是可以借鉴一下让我们摸着石头过河的. 首先我们得 ...
- DHCP 和 MDT 分开服务器的设置方法
DHCP设置 043:供应商特定信息:01 04 00 00 00 00 FF 060:PXEClient:PXEClient 066:启动服务器主机名:IP 067:启动文件名:\Boot\x86\ ...
- Python3编写自动签到服务程序
公司加班的餐补需要登录网站签到领取,有时候会忘记,于是自己用Python写了小程序来自动签到.刚开始只是做了自己用,直接写的黑框程序,后来给同事用,就打包成exe.再后来有人说要写成window服务会 ...
- AI:狄拉克之海上的涟漪
延陵季子2011年 8月27日 19:02 借鉴英文原文:Ripples in the Dirac Sea 当他试着用一种轻松的口吻诉说一些事情时,我会明白,其实我们都明白,在他的心里绝对不是平 ...
- WebGL画点程序v3
本文程序实现画一个点的任务,如下图.其中,点的颜色由Javascript传到片元着色器程序中. 整个程序包含两个文件,分别是: 1. HelloPoint3.html <!DOCTYPE HTM ...
- python 生成测试报告并发送邮件
前言: 使用unittest编写自动化测试脚本,执行脚本后可以很方便看到测试用例的执行情况. 但如果想向领导汇报工作,就需要提供更直观的测试报告. 思路: 使用unittest编写测试用例,HTMLT ...
- git 还原到某次commit
不可逆提交 一,reset 1.git log查看提交记录 git log 2.选择某次提交的commit ID,ctrl+c复制提交ID 3.使用git reset –hard 还原到某一次提交 g ...