在平时刷算法题和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() (不完整介绍)的更多相关文章

  1. c++中sort()及qsort()的使用方法总结

    当并算法具体解释请见点我 想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表:   函数名 ...

  2. c++中sort()及qsort()的用法总结

    当并算法详解请见点我 想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描 ...

  3. C++中sort()函数使用介绍

    sort()简介 为什么选择使用sort()  在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间.而且我们还需要根据需要去选择相关的排序方法: ...

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

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

  5. sort 与 qsort

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

  6. nginx基本配置与参数说明以及Nginx中的upstream轮询机制介绍

    转自:http://blog.csdn.net/happydream_c/article/details/54943802 一.nginx简介 Nginx (发音为[engine x])专为性能优化而 ...

  7. 【重温基础】JS中的常用高阶函数介绍

    Ps. 晚上加班到快十点,回来赶紧整理整理这篇文章,今天老大给我推荐了一篇文章,我从写技术博客中收获到了什么?- J_Knight_,感受也是很多,自己也需要慢慢养成记录博客的习惯,即使起步艰难,难以 ...

  8. SQL 必知必会笔记--完整介绍sql技巧

    PS:完整介绍数据处理,表结构操作,视图,事务处理,存储过程,约束,索引,游标,触发,数据库安全等sql技巧 目录 数据处理 增:插入数据+复制表 删:删除行数据+删除指定列数据 改:更新数据 查:基 ...

  9. java中的compareto方法的详细介绍

    java中的compareto方法的详细介绍 Java Comparator接口实例讲解(抽象方法.常用静态/默认方法) 一.java中的compareto方法 1.返回参与比较的前后两个字符串的as ...

随机推荐

  1. JavaScript中变速运动的数学模型构建

    AB两地直线距离相距为S,机器人β从A点向B点行进.已知机器人β的每间隔固定时间行进一段路程,其下次行进的距离为当前距离B点路程的1/q(q为正整数),求机器人第n次行进距离的表达式an以及前n项和公 ...

  2. go 函数高级运用

    一.函数作用域 说明 作用域的定义:已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围 在说函数作用域之前,先简单说一下局部变量和局变量 简单的说: 全局变量:在一个文件中,任何地方都 ...

  3. XOJ测试 2016.5.22

    哈哈 我是最先使用XOJ的人之一 膜拜zrt ing 首先是XOJ神奇的界面 还没有建设完的OJ是这个样子的 一共有5道题 这次小测有3道题 是T2T3T4 首先是骑士精神 (BZOJ1085) 上来 ...

  4. 数据连接类 这里采用mysql

    数据库通用操作类,自己参照几个通用类改写的,用起来还是蛮不错....  这里用的mysql 要是其他数据库自行更改下就好 public class MySqlHelper { public stati ...

  5. JDBC的详细使用

    1.首先说一下需要用到的工具: ①我这里用的数据库是MySql5.6 ,MySql6.0开始被Oracle收购需要付费了,6.0以下版本免费. ②去Maven仓库下载JDBC的jar包 Maven仓库 ...

  6. 复习java基础第四天(集合:List、Map、Collections、Enumeration)

    一.List: List 代表一个元素有序.且可重复的集合,集合中的每个元素都有其对应的顺序索引 List 允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 默认按元素的添加顺序设置 ...

  7. dubbo之服务分组

    当一个接口有多种实现时,可以用group区分. 服务 <dubbo:service group="feedback" interface="com.xxx.Inde ...

  8. eclipse中导入maven项目:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.proje

    org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter) 解决方法为:更新eclipse中的maven插件 1.help ...

  9. HDU_2149_基础博弈sg函数

    Public Sale Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. 目录-Linux

    Linux文件系统: Linux: glibc 程序编译方式: 动态链接 静态编译 进程的类型: 终端:硬件设备,关联一个用户接口 与终端相关:通过终端启动 与终端无关:操作引导启动过程当中自动启动 ...