• <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。  七種常見排法?。?!
             一、對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)  編輯 收藏 引用

            久久久久久毛片免费播放| 久久伊人五月丁香狠狠色| 久久久久久久久无码精品亚洲日韩 | 久久激情五月丁香伊人| 久久久久久综合一区中文字幕| 久久99精品久久久久婷婷| 久久99国产精品久久99| 国产精品免费久久久久影院| 久久96国产精品久久久| 国内精品欧美久久精品| 久久亚洲日韩看片无码| 久久精品人人做人人爽97 | 国产—久久香蕉国产线看观看| 国产亚州精品女人久久久久久| 亚洲七七久久精品中文国产 | 狠狠综合久久AV一区二区三区| 亚洲国产精品无码久久| 18岁日韩内射颜射午夜久久成人| 久久精品中文字幕第23页| 久久久久久亚洲精品成人| 精品无码人妻久久久久久| 久久久久亚洲av无码专区导航| 国内精品久久久久久久久| 色婷婷综合久久久久中文| 久久精品国产精品亚洲人人 | 久久综合丁香激情久久| 久久亚洲AV无码精品色午夜麻豆 | 国产精品免费久久久久电影网| 久久发布国产伦子伦精品| 亚洲AⅤ优女AV综合久久久| 色综合久久综精品| 亚洲国产精品久久久久婷婷软件| 精品一二三区久久aaa片| 久久强奷乱码老熟女| 国产成人无码精品久久久久免费 | 国产情侣久久久久aⅴ免费| 久久中文字幕人妻丝袜| 国产精品久久久久免费a∨| 久久亚洲2019中文字幕| 国内精品久久久久久中文字幕| 91精品国产91久久久久久蜜臀|