• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Yiner的ACM

            成長的痕跡
            <2011年4月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            統計

            • 隨筆 - 29
            • 文章 - 0
            • 評論 - 2
            • 引用 - 0

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            qsort用法

                      1。qsort, 即快速排序, 包含在<cstdlib>或<stdlib.h>中,
             函數有四個參數, 沒有返回值 下面是一個典型的寫法:
             qsort(s,n,sizeof(s[0]),cmp);
             其中, s是需要排序的數組名,  也可以理解成開始地址, 
             因為你如果只需要對數組的部分排序的話, s可以寫成&s[i]的形式的
             第二個參數n是參與排序的元素個數, 第三個參數是單個元素的大小,
             通常我們用sizeof()來獲取大小,  因為它足夠放心 絕對無毒^_^
             而且 很多時候我們需要對結構體進行排序的 你很難把握它的大小的~
             最后一個參數, 也就是我今天對著愣了很久的東東了 什么鳥東西嘛, 
             搞得忒神密-_-!!!!
             cmp是一個比較函數 不過這不是系統定義好的函數 而是需要自己手動寫的 也就是說 你可以把它叫做abcd或是rubbish什么
             因為是比較函數 我比較習慣用cmp
             cmp的典型定義是

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

             其中返回值必須是int,兩個參數的類型必須都是const void *, 這樣你可以對他進行強制轉換成任何其他類型
             有點想C#中的box  哈~~
             假設是對int排序的話,如果是升序,那么就是如果a比b大cmp返回一個正值,小則負值,相等返回0
             當然當你對具體的數組進行排序的話 cmp里面就要做具體的處理
             
                    2。  七種常見排法?。。?br> 一、對int類型數組排序
             int num[100];
             Sample:

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

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

             二、對char類型數組排序(同int類型)
             char word[100];
             Sample:

             int cmp( const void *a , const void *b )
             
            {
             
            return *(char *)a - *(char *)b;
             }

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


             三、對double類型數組排序(特別要注意)

             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);

             四、對結構體一級排序
             

            struct In
                
            {
                
            double data;
                
            int other;
                }
            s[100]
                
            //按照data的值從小到大將結構體排序,關于結構體內的排序關鍵數據data的類型可以很多種,參考上面的例子寫
                int cmp( const void *a ,const void *b)
                
            {
                
            return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
                }

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

             五、對結構體二級排序
             

            struct In
            {
            int x;
            int y;
            }
            s[100];//按照x從小到大排序,當x相等時按照y從大到小排序
            int cmp( const void *a , const void *b )
            {
            struct In *= (In *)a;
            struct In *= (In *)b;
            if(c->!= d->x) return c->- d->x;
            else return d->- c->y;
            }

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

             

             六、對字符串進行排序

            struct In
                
            {
                
            int data;
                
            char str[100];
                }
            s[100];
                
            //按照結構體中字符串str的字典順序排序
                int cmp ( const void *a , const void *b )
                
            {
                
            return strcmp( (*(In *)a)->str , (*(In *)b)->str );
                }

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

             七、計算幾何中求凸包的cmp

             int cmp(const void *a,const void *b) //重點cmp函數,把除了1點外的所有點,旋轉角度排序
             {
             
            struct point *c=(point *)a;
             
            struct point *d=(point *)b;
             
            if( calc(*c,*d,p[1]) < 0return 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)) //如果在一條直線上,則把遠的放在前面
             return 1;
             
            else return -1;
             }

            posted on 2011-04-02 20:47 Yiner 閱讀(391) 評論(0)  編輯 收藏 引用

            婷婷久久久亚洲欧洲日产国码AV | 精品人妻伦九区久久AAA片69| 亚洲?V乱码久久精品蜜桃| 2020久久精品亚洲热综合一本| 久久精品a亚洲国产v高清不卡| 久久精品亚洲男人的天堂| 99久久国产宗和精品1上映| 久久久久国产精品| 一个色综合久久| 亚洲国产精品人久久| 亚洲精品乱码久久久久久中文字幕| 97久久精品人人澡人人爽| 一本一本久久a久久综合精品蜜桃| 99久久久精品免费观看国产| 人妻无码精品久久亚瑟影视| 国产—久久香蕉国产线看观看| 久久久久人妻精品一区| 四虎国产精品成人免费久久| 国产激情久久久久影院小草| 国产国产成人精品久久| 久久亚洲美女精品国产精品| 日本精品一区二区久久久| 99久久婷婷国产一区二区| 久久精品99久久香蕉国产色戒| 精品人妻伦九区久久AAA片69| 亚洲性久久久影院| 久久中文精品无码中文字幕| 99国内精品久久久久久久| 久久九九青青国产精品| 久久se精品一区二区| 狠狠色丁香久久婷婷综合五月| 久久中文字幕人妻熟av女| 伊人久久大香线蕉成人| 久久久www免费人成精品| 国产成人综合久久精品红| 欧美国产成人久久精品| 性高湖久久久久久久久AAAAA| 狠狠色丁香久久婷婷综合_中| 尹人香蕉久久99天天拍| 久久精品国产精品亚洲精品| 久久青青草原精品国产|