在平时刷算法题和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. Centos6系列安装nginx

    设置ssh服务为开机启动 输入命令:chkconfig sshd on 即可.注:若是chkconfig sshd off则禁止SSH开机启动 设定账号为bizuser ,密码为123456 第一步: ...

  2. Python迭代器(斐波拉切数列实例)

    将一个容器通过iter()函数处理后,就变成了迭代器.迭代器有2个魔法方法__iter__.__next__,一个迭代器必须实现__iter__,这个方法实际上是返回迭代器本身(return self ...

  3. SQLServer2008 将本地excel导入到远程服务器表

    --1.创建链接服务器,相当于创建一个访问远程数据库的快捷方式 exec sp_addlinkedserver 'TestLink', ' ', 'SQLOLEDB ', '111.11.1.111' ...

  4. Xcode控制台输出中文

    创建一个.m文件,然后将一下代码加入.m文件中即可实现控制台输出中文,具体代码如下: #ifndef Release @implementation NSSet(Log) - (NSString *) ...

  5. Java内存机制,内存地址

    问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); // ...

  6. php全局变量 超全局变量

    php中有许多超全局变量,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS    引用全局 ...

  7. XML知识总结

    1.XML概念及作用? XML( eXtensible Markup Language,可扩展标记语言)是一种简单的数据存储语言 作用:用来存储和交换数据 无法描述页面的排版和显示形式 2.XML和X ...

  8. 【JSP】常用跳转方式

    原文地址:http://blog.csdn.net/wanghuan203/article/details/8836326 (1)href超链接标记,属于客户端跳转 (2)使用javascript完成 ...

  9. C# 增加 删除 更新 方法

    /// <summary> /// 增加一条数据 /// </summary> public int Add(string 表名,string 参数,string 参数值) { ...

  10. antd #upload

    import React from 'react' import {Upload, Icon, message,Button } from 'antd' import './index.scss'; ...