• <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)  編輯 收藏 引用

            国产午夜精品理论片久久| 草草久久久无码国产专区| 亚洲国产视频久久| 伊人久久大香线蕉亚洲| a高清免费毛片久久| 26uuu久久五月天| 思思久久精品在热线热| 久久国产精品无码一区二区三区| 91精品国产色综久久| 一本色道久久88—综合亚洲精品| 91精品国产综合久久婷婷| 久久综合鬼色88久久精品综合自在自线噜噜| 亚洲国产精品一区二区久久hs | 久久精品国产99国产电影网| 久久精品无码av| 久久精品九九亚洲精品| 波多野结衣久久一区二区 | 久久综合九色综合久99| 久久人人爽人人人人片av| 99精品久久久久久久婷婷| 久久久久人妻一区二区三区vr| 久久午夜综合久久| 9999国产精品欧美久久久久久| 久久精品人人槡人妻人人玩AV| 国产欧美久久久精品影院| 久久男人AV资源网站| 97超级碰碰碰碰久久久久| 青青青青久久精品国产h| 久久99精品久久只有精品| 亚洲AV无码久久精品成人 | 日本三级久久网| 狠狠狠色丁香婷婷综合久久俺| 久久久女人与动物群交毛片| 亚洲国产精品久久电影欧美| 久久精品国产久精国产一老狼| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 97精品伊人久久大香线蕉app| 精品国产乱码久久久久久1区2区 | yy6080久久| 色综合久久无码五十路人妻| 一本色道久久HEZYO无码|