最近学弟们问快速排序的比较多,今天自己就做一下总结,快速排序在库函数里面有现成的,不用自己实现,调用一下就可以达到自己想要的结果,掌握以后就可以完全摒弃冒泡和选择了,并且时间复杂度也从O(n*n)提升到O(n*log(n)),

先说C中的qsort():

  头文件:#include<stdlib.h>,

  调用参数:qsort(排序首地址,需排序元素个数,需排序元素大小,定义排序方式的函数名);

  1,对int型数组a[n]排序:

    int cmp (const void *a, const void *b)
    {
      return *(int *)a - *(int *)b;
    }//升序

    int cmp (const void *a, const void *b)
    {
      return *(int *)b - *(int *)a;
    }//降序

  2,对字符串数组a[n]排序:

    int cmp (const void *a, const void *b)
    {
      return strcmp((char *)a, (char *)b);
    }//升序

    int cmp (const void *a, const void *b)
    {
      return strcmp((char *)b, (char *)a);
    }//降序

  3,对结构体数组a[n]排序

    struct node
    {
      int x, y;
    };

    int cmp (const void *a, const void *b)
    {
      node *c = (node *)a;
      node *d = (node *)b;
      return c->x - d->x;
    }//按照a[i].x升序排列

    int cmp (const void *a, const void *b)
    {
      node *c = (node *)a;
      node *d = (node *)b;
      return d->x - c->x;
    }//按照a[i].x降序排列

    ps:结构体的二级排序只需要再加上一个if条件语句即可。

    以上所有的排序函数,使用时都是调用qsort(a, n, sizeof(a[0]), cmp);

C++中的sort函数:其实有时候sort函数比qsort函数还要稍微快那么一点,并且用起来比较方便,所以在这里做一下广告,有排序用sort函数,不能用创造机会也要用!!!

  头文件:#include<algothrim>

  调用参数:sort(排序首地址,排序末地址,定义排序方式的函数名(可有可无)),如果没有排序方式默认按照升序排列。

  现在我们就解决一下如何按照降序方式排列。

  1,对int型数组a[n]降序排:

  bool cmp (int a, int b)
  {
    return a > b;
  }//降序

  2,对string型的数组a[n]排序:

  bool cmp (string a, string b)
  {
    return a > b;
  }//降序

  3,对结构体型的数组a[n]排序:

  bool cmp (node a, node b)
  {
    return a.x > b.x;
  }//降序

  ps:如果对结构体进行二级排序,只需在排序函数里面加上if语句。

  以上所有的排序函数调用的时候都是用:sort(a, a+n, cmp);

  其实强大的stl库给我们提供了辣么多的函数,有一些在这里还是很有用的,比如:

  sort(a, a+n, less<数据类型>());//对指定的数据类型升序排

  sort(a, a+n, greater<数据类型>());//对指定的数据类型降序排

因为C/C++给我们提供给了太多的数据类型,所以上面只是一些常见的数据类型的排序。

    

    

C/C++中qsort()以及sort()的用法的更多相关文章

  1. qsort()与sort的用法(收藏)

    sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件: qsort()是C中的排序函数,其头文件为:#include<stdlib.h> ...

  2. STL中find和sort的用法总结

    STL算法 STL 提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等. 许多算法操作的是容器上的一个区间(也可以是整个容器),因此需要两个参数,一个是区间起点元素的迭代器,另一 ...

  3. python中List的sort方法的用法

    python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. 关键字: python列表排序 python字典排序 sorted List的元素可以是各种东 ...

  4. 【转】python中List的sort方法(或者sorted内建函数)的用法

    原始出处:http://gaopenghigh.iteye.com/blog/1483864 python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. ...

  5. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  6. [转载]hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  7. C++ sort函数用法

    参考文档:http://hi.baidu.com/posinfo/item/dc3e73584c535cc9d2e10c27 C++ sort函数用法 FROM:http://hi.baidu.com ...

  8. qsort与sort

    快排是我们平常敲代码和比赛的时候     经常使用到的方法 qsort是函数库中自带的函数    这是一个标准的快排函数 而sort比qsort更是好用    sort对于不同大小的数组   会使用不 ...

  9. 引用 qsort与sort的比较

    引用 linpder 的 qsort与sort的比较     在C/C++标准库中提供了快速排序的函数qsort():在STL中也提供了sort()排序函数,那么这两个函数哪个快呢?之前与代码-> ...

随机推荐

  1. solr4.8中集成mmseg4j1.9.1

    要想在Solr中整合mmseg4j其实很容易,只需要如下几个步骤 1.下载(https://code.google.com/p/mmseg4j/downloads/list)并解压mmseg4j-1. ...

  2. sql基本查询语句练习

    student(S#,Sname,Sage,Ssex) 学生表       S#:学号: Sname:学生姓名:Sage:学生年龄:Ssex:学生性别 Course(C#,Cname,T#) 课程表 ...

  3. CSS代码重构与优化之路(转)

    CSS代码重构与优化之路   阅读目录 CSS代码重构的目的 CSS代码重构的基本方法 CSS方法论 我自己总结的方法 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多 ...

  4. C++指针作为函数的参数进行传递时注意的问题

    应注意问题: 当指针作为函数的参数进行传递的时候,本质上还是进行的"值传递",也就是复制了一个新的指向该地址的指针变量. 只有在被调函数中,对指针进行引用操作,才可以达到不需要返回 ...

  5. php学习笔记-逻辑运算符

    $a and $b 只有当$a和$b都是true才返回true,否则false. $a or $b 只要$a或者$b至少有一个是true则返回true.意思是或者$a是true,或者是$b是true, ...

  6. 长城防火墙(GFW)

    一.简介 中国防火长城,官方名为金盾工程,是由政府运作的一个互联网审查监控项目.在其管辖互联网内部建立的多套网络审查系统的总称,包括相关行政审查系统.其英文名称Great Firewall of Ch ...

  7. R: 关于文件 文件夹的处理:file.show() dir.create().....

    文件管理主要函数: setwd( ):设定R软件当前工作目录.getwd( ):查看R软件当前工作目录.list.files( ): 查看当前目录下文件.file.show( ): 显示文件.file ...

  8. Clos Network

    1952年,Charles Clos 设计出了一种多级的交换架构,用多级的小型交换机阵列来构建一张大的无阻塞的网络.在此之前,要实现“无阻塞的架构”,只能采用NxN的Cross-bar方式. 而Clo ...

  9. SDUT 2498 AOE网上的关键路径

    AOE网上的关键路径 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 一个无环的有向图称为无 ...

  10. js教程--从入门到精通 第一篇 js的前世今生以及js中基本数据类型和引入方式

    1.Javascript前世今生   1.1.什么是Javascript       Javascript运行于Javascript [解释器/引擎]中的解释性脚本语言      Javascript ...