欧洲亚洲日产最新在线感觉,五月综合缴缴情婷婷,中文字幕欧美精品另类小说,久热中文字幕在线播放

<sub id="dvlye"></sub>
<xmp id="dvlye"><ol id="dvlye"></ol></xmp>
    1. 全國統(tǒng)一學(xué)習(xí)專線 8:30-21:00
      位置:七考網(wǎng) > 外語類 > 提升英語 > c語言中sort的用法詳解  正文

      c語言中sort的用法詳解

      2023-02-14 16:31:19來源:互聯(lián)網(wǎng)

      最近這段時間總有小伙伴問小編c語言中sort的用法詳解是什么,小編為此在網(wǎng)上搜尋了一些有關(guān)于c語言中sort的用法詳解的知識送給大家,希望能解答各位小伙伴的疑惑。


      (資料圖片)

        c語言的學(xué)習(xí)很多是比較復(fù)雜的,那么c語言中sort的用法的用法你知道嗎?下面七考網(wǎng)小編就跟你們詳細(xì)介紹下c語言中sort的用法的用法,希望對你們有用。

        c語言中sort的用法的用法

        sort是STL中提供的算法,頭文件為#include<algorithm>以及using namespace std; 函數(shù)原型如下:

        ?

        1

        2

        3

        4

        5

        template <class RandomAccessIterator>

        void sort ( RandomAccessIterator first, RandomAccessIterator last );

        template <class RandomAccessIterator, class Compare>

        void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

        使用第一個版本是對[first,last)進(jìn)行升序排序,默認(rèn)操作符為"<",第二個版本使用comp函數(shù)進(jìn)行排序控制,comp包含兩個在[first,last)中對應(yīng)的值,如果使用"<"則為升序排序,如果使用">"則為降序排序,分別對int、float、char以及結(jié)構(gòu)體排序例子如下:

        ?

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        14

        15

        16

        17

        18

        19

        20

        21

        22

        23

        24

        25

        26

        27

        28

        29

        30

        31

        32

        33

        34

        35

        36

        37

        38

        39

        40

        41

        42

        43

        44

        45

        46

        47

        48

        49

        50

        51

        52

        53

        54

        55

        56

        57

        58

        59

        60

        61

        62

        63

        64

        65

        66

        67

        68

        69

        70

        71

        #include<stdio.h>

        #include<algorithm>

        #include<string>

        using namespace std;

        struct product{

        char name[16];

        float price;

        };

        int array_int[5]={4,1,2,5,3};

        char array_char[5]={"a","c","b","e","d"};

        double array_double[5]={1.2,2.3,5.2,4.6,3.5};

        //結(jié)構(gòu)比較函數(shù)(按照結(jié)構(gòu)中的浮點數(shù)值進(jìn)行排序)

        bool compare_struct_float(const product &a,const product &b){

        return a.price<b.price;

        }

        //結(jié)構(gòu)比較函數(shù)(按照結(jié)構(gòu)中的字符串進(jìn)行排序)

        bool compare_struct_str(const product &a,const product &b){

        return string(a.name)<string(b.name);

        }

        //打印函數(shù)

        void print_int(const int* a,int length){

        printf("升序排序后的int數(shù)組:\n");

        for(int i=0; i<length-1; i++)

        printf("%d ",a[i]);

        printf("%d\n",a[length-1]);

        }

        void print_char(const char* a,int length){

        printf("升序排序后的char數(shù)組:\n");

        for(int i=0; i<length-1; i++)

        printf("%c ",a[i]);

        printf("%c\n",a[length-1]);

        }

        void print_double(const double* a,int length){

        printf("升序排序后的dobule數(shù)組:\n");

        for(int i=0; i<length-1; i++)

        printf("%.2f ",a[i]);

        printf("%.2f\n",a[length-1]);

        }

        void print_struct_array(struct product *array, int length)

        {

        for(int i=0; i<length; i++)

        printf("[ name: %s \t price: $%.2f ]\n", array[i].name, array[i].price);

        puts("--");

        }

        void main()

        {

        struct product structs[] = {{"mp3 player", 299.0f}, {"plasma tv", 2200.0f},

        {"notebook", 1300.0f}, {"smartphone", 499.99f},

        {"dvd player", 150.0f}, {"matches", 0.2f }};

        //整數(shù)排序

        sort(array_int,array_int+5);

        print_int(array_int,5);

        //字符排序

        sort(array_char,array_char+5);

        print_char(array_char,5);

        //浮點排序

        sort(array_double,array_double+5);

        print_double(array_double,5);

        //結(jié)構(gòu)中浮點排序

        int len = sizeof(structs)/sizeof(struct product);

        sort(structs,structs+len,compare_struct_float);

        printf("按結(jié)構(gòu)中float升序排序后的struct數(shù)組:\n");

        print_struct_array(structs, len);

        //結(jié)構(gòu)中字符串排序

        sort(structs,structs+len,compare_struct_str);

        printf("按結(jié)構(gòu)中字符串升序排序后的struct數(shù)組:\n");

        print_struct_array(structs, len);

        }

        sort函數(shù)的用法

        做ACM題的時候,排序是一種經(jīng)常要用到的操作。如果每次都自己寫個冒泡之類的O(n^2)排序,不但程序容易超時,而且浪費寶貴的比賽時間,還很有可能寫錯。STL里面有個sort函數(shù),可以直接對數(shù)組排序,復(fù)雜度為n*log2(n)。使用這個函數(shù),需要包含頭文件。

        這個函數(shù)可以傳兩個參數(shù)或三個參數(shù)。第一個參數(shù)是要排序的區(qū)間首地址,第二個參數(shù)是區(qū)間尾地址的下一地址。也就是說,排序的區(qū)間是[a,b)。簡單來說,有一個數(shù)組int a[100],要對從a[0]到a[99]的元素進(jìn)行排序,只要寫sort(a,a+100)就行了,默認(rèn)的排序方式是升序。

        拿我出的“AC的策略”這題來說,需要對數(shù)組t的第0到len-1的元素排序,就寫sort(t,t+len);

        對向量v排序也差不多,sort(v.begin(),v.end());

        排序的數(shù)據(jù)類型不局限于整數(shù),只要是定義了小于運算的類型都可以,比如字符串類string。

        如果是沒有定義小于運算的數(shù)據(jù)類型,或者想改變排序的順序,就要用到第三參數(shù)——比較函數(shù)。比較函數(shù)是一個自己定義的函數(shù),返回值是bool型,它規(guī)定了什么樣的關(guān)系才是“小于”。想把剛才的整數(shù)數(shù)組按降序排列,可以先定義一個比較函數(shù)cmp

        ?

        1

        2

        3

        4

        bool cmp(int a,int b)

        {

        return a>b;

        }

        排序的時候就寫sort(a,a+100,cmp);

        假設(shè)自己定義了一個結(jié)構(gòu)體node

        ?

        1

        2

        3

        4

        5

        struct node{

        int a;

        int b;

        double c;

        }

        有一個node類型的數(shù)組node arr[100],想對它進(jìn)行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b還相同,就按c降序排列。就可以寫這樣一個比較函數(shù):

        以下是代碼片段:

        ?

        1

        2

        3

        4

        5

        6

        bool cmp(node x,node y)

        {

        if(x.a!=y.a) return x.a

        if(x.b!=y.b) return x.b>y.b;

        return return x.c>y.c;

        }

        排序時寫sort(arr,a+100,cmp);

        ?

        1

        2

        3

        4

        5

        qsort(s[0],n,sizeof(s[0]),cmp);

        int cmp(const void *a,const void *b)

        {

        return *(int *)a-*(int *)b;

        }

        sort函數(shù)的用法:對int類型數(shù)組排序

        ?

        1

        2

        3

        4

        5

        6

        7

        int num[100];

        Sample:

        int cmp ( const void *a , const void *b )

        {

        return *(int *)a - *(int *)b;

        }

        qsort(num,100,sizeof(num[0]),cmp);

        sort函數(shù)的用法:對char類型數(shù)組排序(同int類型)

        ?

        1

        2

        3

        4

        5

        6

        7

        char word[100];

        Sample:

        int cmp( const void *a , const void *b )

        {

        return *(char *)a - *(int *)b;

        }

        qsort(word,100,sizeof(word[0]),cmp);

        sort函數(shù)的用法:對double類型數(shù)組排序(特別要注意)

        ?

        1

        2

        3

        4

        5

        6

        double in[100];

        int cmp( const void *a , const void *b )

        {

        return *(double *)a > *(double *)b ? 1 : -1;

        }

        qsort(in,100,sizeof(in[0]),cmp);

        sort函數(shù)的用法:對結(jié)構(gòu)體一級排序

        ?

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        struct In

        {

        double data;

        int other;

        }s[100]

        //按照data的值從小到大將結(jié)構(gòu)體排序,關(guān)于結(jié)構(gòu)體內(nèi)的排序關(guān)鍵數(shù)據(jù)data的類型可以很多種,參考上面的例子寫

        int cmp( const void *a ,const void *b)

        {

        return ((In *)a)->data - ((In *)b)->data ;

        }

        qsort(s,100,sizeof(s[0]),cmp);

        sort函數(shù)的用法:對結(jié)構(gòu)體

        ?

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        12

        13

        14

        struct In

        {

        int x;

        int y;

        }s[100];

        //按照x從小到大排序,當(dāng)x相等時按照y從大到小排序

        int cmp( const void *a , const void *b )

        {

        struct In *c = (In *)a;

        struct In *d = (In *)b;

        if(c->x != d->x) return c->x - d->x;

        else return d->y - c->y;

        }

        qsort(s,100,sizeof(s[0]),cmp);

        sort函數(shù)的用法:對字符串進(jìn)行排序

        ?

        1

        2

        3

        4

        5

        6

        7

        8

        9

        10

        11

        struct In

        {

        int data;

        char str[100];

        }s[100];

        //按照結(jié)構(gòu)體中字符串str的字典順序排序

        int cmp ( const void *a , const void *b )

        {

        return strcmp( ((In *)a)->str , ((In *)b)->str );

        }

        qsort(s,100,sizeof(s[0]),cmp);

        sort函數(shù)的用法:計算幾何中求凸包的cmp

        ?

        1

        2

        3

        4

        5

        6

        7

        8

        9

        int cmp(const void *a,const void *b) //重點cmp函數(shù),把除了1點外的所有點,旋轉(zhuǎn)角度排序

        {

        struct point *c=(point *)a;

        struct point *d=(point *)b;

        if( calc(*c,*d,p[1]) < 0) return 1;

        else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一條直線上,則把遠(yuǎn)的放在前面

        return 1;

        else return -1;

        }


      同類文章
      導(dǎo)航

      一級建造師 二級建造師 消防工程師 消防設(shè)施操作員 BIM 造價工程師 環(huán)評師 監(jiān)理工程師 咨詢工程師 安全工程師 建筑九大員 公路水運檢測 通信工程 智慧消防工程師 裝配工程師 一級注冊建筑師 二級注冊建筑師 注冊電氣工程師 智慧建造工程師 房地產(chǎn)估價師 應(yīng)急救援員 EPC工程總承包 PLC智能制造 碳排放管理師 雅思 托福 GRE 托業(yè) SAT GMAT A-Level ACT AP課程 OSSD 多鄰國英語 考研英語 英語四六級 商務(wù)英語 青少兒英語 IB英語 劍橋英語 職場英語 提升英語 AEAS 英語口語 出國英語 初高中英語 學(xué)生英語 成人英語 公共英語 詞庫 經(jīng)濟(jì)師 初級會計師 中級會計師 注冊會計師 基金從業(yè) 證券從業(yè) 薪稅師 銀行從業(yè) CMA ACCA 會計實訓(xùn) 稅務(wù)師 CFA 企業(yè)合規(guī)師 審計師 FRM 高級會計師 會計就業(yè) 期貨從業(yè) CQF 真賬實操技能 葡萄牙語 日語 德語 法語 韓語 西班牙 意大利 高考小語種 粵語 泰語 俄語 阿拉伯語 優(yōu)路 火星時代 環(huán)球雅思 櫻花日語 啟德雅思 新通 達(dá)內(nèi) 高頓 童程童美 樂博樂博 小碼王 秦漢胡同 新航道 秦學(xué)教育 學(xué)大教育 東方瑞通