• <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>

            Problem Solving using C++

            Algorithm Study using C++

            排序算法總結(jié)(1)---概述

            常見的排序方式有6種:
            ---簡單排序里面的有:插入排序、選擇排序、冒泡排序,時間復(fù)雜度為O(n^2)
            ---線性對數(shù)階的排序: 歸并排序(merge sort),快速排序,堆排序,時間復(fù)雜度為O(nlogn)

            在n<=50的情況下,最好使用插入排序或者選擇排序,由于選擇排序移動次數(shù)比插入排序少,在數(shù)據(jù)量比較多的情況,推薦使用選擇排序。
            如果序列基本上正序了,則使用插入排序、冒泡排序或者隨機(jī)的快速排序
            在n非常大的情況下,使用O(nlogn)的算法,即歸并排序、快速排序、堆排序。后2者是不穩(wěn)定的排序,而merge排序是穩(wěn)定的排序方式,快速排序是基于比較的排序中的最好的排序方法。

            實驗條件下算法運(yùn)行時間:(單位毫秒,10萬隨機(jī)數(shù))
            冒泡排序:    56953
            選擇排序:    20109
            插入排序:    14547
            歸并排序:    134
            堆排序:        67
            快速排序:    28

            三種O(nlogn)的排序時間比較為:
            排序算法        10萬   100萬     1000萬
            歸并排序       134       1309     13985
            堆排序           67         865        14292
            快速排序       28         513        9815

            下面給出insertion sort的原理和實現(xiàn)
            insertion sort是穩(wěn)定排序,在數(shù)據(jù)量非常小的情況下,非常快速。其原理就如同打牌的時候按順序插入牌一樣(來自introdution to algorithm),從后面往前面找大于最新的牌的數(shù),然后往后面替換,再將最新的牌插入進(jìn)去完成了前面的牌是已經(jīng)排序好的。核心算法如下:
            for(int i=1;i<size;i++)
            {
                 //get the new card
                int temp = arr[i];
                int j=i-1;

                while((j>=0)&&(arr[j]>temp))//find the old card bigger than the new card
                {
                    arr[j+1]=arr[j];
                    j--;
                }

                //get the position of the new card
                arr[j+1]=temp;
            }

            具體實現(xiàn)為:
            #include <iostream>
            #include 
            <algorithm>
            #include 
            <iterator>

            using namespace std;

            int main(int argc,char* argv[])
            {
                
            int arr[]={5,6,1,2,7,3,8,10,4,9};
                
            int size = sizeof(arr)/sizeof(arr[0]);
                
                copy(arr,arr
            +size,ostream_iterator<int>(cout," "));
                cout
            <<endl;

                
            for(int i=1;i<size;i++)
                {
                    
            int temp = arr[i];
                    
            int j=i-1;
                    
                    
            while((arr[j]>temp)&&(j>=0))
                    {
                        arr[j
            +1]=arr[j];
                        j
            --;
                    }
                    
                    arr[j
            +1]=temp;
                }
                
                copy(arr,arr
            +size,ostream_iterator<int>(cout," "));
                cout
            <<endl;
                
                system(
            "pause");

                
            return 0;
            }



            posted on 2007-08-22 10:22 Kingoal Lee's Alogrithm Study using cplusplus 閱讀(299) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            My Links

            Blog Stats

            常用鏈接

            留言簿(1)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            天天爽天天爽天天片a久久网| 亚洲人成无码久久电影网站| 天天综合久久一二三区| 久久免费线看线看| 久久精品水蜜桃av综合天堂| 久久久老熟女一区二区三区| 亚洲成色www久久网站夜月| 一本一本久久a久久综合精品蜜桃| 亚洲欧美久久久久9999| 一本色道久久综合| 狠狠色综合网站久久久久久久高清 | 色婷婷综合久久久久中文| 精品久久久久成人码免费动漫| 午夜视频久久久久一区 | 久久婷婷五月综合97色直播| 久久强奷乱码老熟女| 人妻精品久久久久中文字幕| 国产精品一区二区久久精品涩爱| 国产精品久久久久蜜芽| 久久水蜜桃亚洲av无码精品麻豆| 国产∨亚洲V天堂无码久久久| 精品999久久久久久中文字幕| 国产精品99久久精品爆乳| 亚洲精品国产自在久久| 久久天天躁狠狠躁夜夜躁2O2O| 91精品国产综合久久久久久| 国产精品成人99久久久久| 中文字幕久久精品| 性做久久久久久久| 国产午夜精品理论片久久| 亚洲欧美成人久久综合中文网| 欧美va久久久噜噜噜久久| 精品久久人人做人人爽综合| 7777久久久国产精品消防器材| 国产精品一久久香蕉国产线看| 久久久久久久综合综合狠狠| 亚洲中文久久精品无码ww16 | 丰满少妇高潮惨叫久久久| 久久最新免费视频| 国产精品久久自在自线观看| 伊人色综合九久久天天蜜桃|