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

            久久久国产精华液| 91亚洲国产成人久久精品网址| 手机看片久久高清国产日韩| 伊人久久无码精品中文字幕| 国产亚洲精品久久久久秋霞| 欧美激情精品久久久久| 免费精品久久天干天干| 久久综合狠狠色综合伊人| 日日狠狠久久偷偷色综合0| 国产精品久久久久久吹潮| 热久久国产欧美一区二区精品 | 久久精品国产99国产精品澳门 | 国产精品99久久久精品无码| 国产精品成人99久久久久| 久久九九精品99国产精品| 久久精品国产一区二区三区| av无码久久久久久不卡网站| 国产精品99久久久精品无码| 国产亚洲成人久久| 久久99精品国产麻豆宅宅| 久久中文字幕精品| 要久久爱在线免费观看| 久久久久久毛片免费看| 久久精品中文无码资源站 | 狠狠色丁香婷综合久久| 性欧美丰满熟妇XXXX性久久久 | 久久久久人妻一区精品性色av| 久久精品这里只有精99品| 丁香五月综合久久激情| 亚洲精品tv久久久久久久久 | 久久无码专区国产精品发布| 亚洲国产精品久久久久婷婷老年 | 亚洲狠狠综合久久| 久久综合丁香激情久久| 99国产精品久久| 精品免费tv久久久久久久| 欧美一区二区三区久久综 | 国产成人久久精品一区二区三区| 久久人人爽人人爽人人片AV麻烦| 亚洲国产成人久久精品99 | 久久亚洲欧美国产精品|