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++給我們提供給了太多的數據類型,所以上面只是一些常見的數據類型的排序。

    

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM