zoukankan      html  css  js  c++  java
  • C/C++中qsort()以及sort()的用法

    最近学弟们问快速排序的比较多,今天自己就做一下总结,快速排序在库函数里面有现成的,不用自己实现,调用一下就可以达到自己想要的结果,掌握以后就可以完全摒弃冒泡和选择了,并且时间复杂度也从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++给我们提供给了太多的数据类型,所以上面只是一些常见的数据类型的排序。

        

        

    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    仅坚持了9天:京东今日宣布暂停火车票代购业务
    Highcharts JS——制作图表的纯js类库
    eclipse插件——php工具集成
    如何新增histats计数器到自己的 blog
    C#写入文本txt
    我怎么感觉js快无敌了~
    马云卸任演讲全文
    添加好玩的honehoneclock到自己的blog
    C#获取日期的年月日时分秒
    js闭包
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4545823.html
Copyright © 2011-2022 走看看