• <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精品国产自在现线小黄鸭| 精品久久久噜噜噜久久久| 国产一久久香蕉国产线看观看| 久久91综合国产91久久精品| 国产精品18久久久久久vr| A狠狠久久蜜臀婷色中文网| 精品久久人人爽天天玩人人妻| 久久久久亚洲精品无码网址| 一级做a爰片久久毛片看看 | 国产精品毛片久久久久久久| 国产成人久久精品麻豆一区| 久久久久久久久久久免费精品| 久久久久精品国产亚洲AV无码| 久久精品一区二区| 亚洲精品无码专区久久同性男| 丁香五月网久久综合| 欧美一级久久久久久久大片| 成人久久综合网| 精品久久久久久无码不卡| 久久九九全国免费| 中文精品久久久久人妻不卡| 久久久久人妻精品一区三寸蜜桃| 丰满少妇人妻久久久久久| 亚洲欧美久久久久9999 | 香蕉99久久国产综合精品宅男自 | 久久婷婷午色综合夜啪| 日本福利片国产午夜久久| 一本一本久久A久久综合精品 | 日韩精品久久无码中文字幕| 99久久精品无码一区二区毛片| 成人国内精品久久久久一区| 久久久噜噜噜久久中文字幕色伊伊 | 久久精品国产久精国产一老狼| 久久国产精品偷99| 国产精品久久99| 久久99精品国产自在现线小黄鸭| 国产精品美女久久福利网站| 国产免费久久精品丫丫| 蜜桃麻豆www久久| 精品人妻伦一二三区久久| 国产精品美女久久久网AV|