青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨感而發

雜七雜八

統計

留言簿(13)

閱讀排行榜

評論排行榜

排序算法總結

花了很長時間終于把排序的基礎學了一下,這段時間學了很多東西,總結一下:
學的排序算法有:插入排序,合并排序,冒泡排序,選擇排序,希爾排序,堆排序,快速排序,計數排序,基數排序,桶排序(沒有實現)。比較一下學習后的心得。
我不是很清楚他們的時間復雜度,也真的不知道他們到底誰快誰慢,因為書上的推導我確實只是小小了解,并沒有消化。也沒有完全理解他們的精髓,所以又什么錯誤的還需要高手指點。呵呵。
1.普及一下排序穩定,所謂排序穩定就是指:如果兩個數相同,對他們進行的排序結果為他們的相對順序不變。例如A={1,2,1,2,1}這里排序之后是A = {1,1,1,2,2} 穩定就是排序后第一個1就是排序前的第一個1,第二個1就是排序前第二個1,第三個1就是排序前的第三個1。同理2也是一樣。這里用顏色標明了。不穩定呢就是他們的順序不應和開始順序一致。也就是可能會是A={1,1,1,2,2}這樣的結果。
2.普及一下原地排序:原地排序就是指不申請多余的空間來進行的排序,就是在原來的排序數據中比較和交換的排序。例如快速排序,堆排序等都是原地排序,合并排序,計數排序等不是原地排序。
3.感覺誰最好,在我的印象中快速排序是最好的,時間復雜度:n*log(n),不穩定排序。原地排序。他的名字很棒,快速嘛。當然快了。我覺得他的思想很不錯,分治,而且還是原地排序,省去和很多的空間浪費。速度也是很快的,n*log(n)。但是有一個軟肋就是如果已經是排好的情況下時間復雜度就是n*n,不過在加入隨機的情況下這種情況也得以好轉,而且他可以做任意的比較,只要你能給出兩個元素的大小關系就可以了。適用范圍廣,速度快。
4.插入排序:n*n的時間復雜度,穩定排序,原地排序。插入排序是我學的第一個排序,速度還是很快的,特別是在數組已排好了之后,用它的思想來插入一個數據,效率是很高的。因為不用全部排。他的數據交換也很少,只是數據后移,然后放入要插入的數據。(這里不是指調用插入排序,而是用它的思想)。我覺得,在數據大部分都排好了,用插入排序會給你帶來很大的方便。數據的移動和交換都很少。
5.冒泡排序,n*n的時間復雜度,穩定排序,原地排序。冒泡排序的思想很不錯,一個一個比較,把小的上移,依次確定當前最小元素。因為他簡單,穩定排序,而且好實現,所以用處也是比較多的。還有一點就是加上哨兵之后他可以提前退出。
6.選擇排序,n*n的時間復雜度, 穩定排序,原地排序。選擇排序就是冒泡的基本思想,從小的定位,一個一個選擇,直到選擇結束。他和插入排序是一個相反的過程,插入是確定一個元素的位置,而選擇是確定這個位置的元素。他的好處就是每次只選擇確定的元素,不會對很多數據進行交換。所以在數據交換量上應該比冒泡小。
7.插入排序,選擇排序,冒泡排序的比較,他們的時間復雜度都是n*n。我覺得他們的效率也是差不多的,我個人喜歡冒泡一些,因為要用它的時候數據多半不多,而且可以提前的返回已經排序好的數組。而其他兩個排序就算已經排好了,他也要做全部的掃描。在數據的交換上,冒泡的確比他們都多。呵呵。舉例說明插入一個數據在末尾后排序,冒泡只要一次就能搞定,而選擇和插入都必須要n*n的復雜度才能搞定。就看你怎么看待咯。
8.合并排序:n*log(n)的時間復雜度, 穩定排序,非原地排序。他的思想是分治,先分成小的部分,排好部分之后合并,因為我們另外申請的空間,在合并的時候效率是0(n)的。速度很快。貌似他的上限是n*log(n),所以如果說是比較的次數的話,他比快速排序要少一些。對任意的數組都能有效地在n*log(n)排好序。但是因為他是非原地排序,所以雖然他很快,但是貌似他的人氣沒有快速排序高。
9.堆排序:n*log(n)的時間復雜度, 非穩定排序,原地排序。他的思想是利用的堆這種數據結構,堆可以看成一個完全二叉樹,所以在排序中比較的次數可以做到很少。加上他也是原地排序,不需要申請額外的空間,效率也不錯。可是他的思想感覺比快速難掌握一些。還有就是在已經排好序的基礎上添加一個數據再排序,他的交換次數和比較次數一點都不會減少。雖然堆排序在使用的中沒有快速排序廣泛,但是他的數據結構和思想真的很不錯,而且用它來實現優先隊列,效率沒得說。堆,還是要好好學習掌握的。
10.希爾排序:n*log(n)的時間復雜度(這里是錯誤的,應該是n^lamda(1 < lamda < 2), lamda和每次步長選擇有關。), 非穩定排序,原地排序。主要思想是分治,不過他的分治和合并排序的分治不一樣,他是按步長來分組的,而不是想合并那樣左一半右一半。開始步長為整個的長度的一半。分成nLen/2個組,然后每組排序。接個步長減為原來的一半在分組排序,直到步長為1,排序之后希爾排序就完成了。這個思路很好,據說是插入排序的升級版,所以在實現每組排序的時候我故意用了插入排序。我覺得他是一個特別好的排序方法了。他的缺點就是兩個數可能比較多次,因為兩個數據會多次分不過他們不會出現數據的交換。效率也是很高的。
11.快速排序,堆排序,合并排序,希爾排序的比較,他們的時間復雜的都是n*log(n),我認為在使用上快速排序最廣泛,他原地排序,雖然不穩定,可是很多情況下排序根本就不在意他是否穩定。他的比較次數是比較小的,因為他把數據分成了大和小的兩部分。每次都確定了一個數的位置,所以理論上說不會出現兩個數比較兩次的情況,也是在最后在交換數據,說以數據交換上也很少。合并排序和堆排序也有這些優點,但是合并排序要申請額外的空間。堆排序堆已經排好的數據交換上比快速多。所以目前快速排序用的要廣泛的多。還有他很容易掌握和實現。
12.計數排序:n的時間復雜度,穩定排序,非原地排序。他的思想比較新穎,就是先約定數據的范圍不是很大,而且數據都是整數(或能定位到整數)的情況,然后直接申請一個空間。把要排序的數組A的元素值與申請空間B的下標對應,然后B中存放該下標元素值的個數,從而直接定位A中每個元素的位置。這樣效率只為n。因為比較很特殊,雖然很快,但是用的地方并不多。
13.基數排序:n的時間復雜度,穩定排序,非原地排序。他的思想是數據比較集中在一個范圍,例如都是4位數,都是5位數,或數據有多個關鍵字,我們先從各位開始排,然后排十位,依次排到最高位,因為我們可以用一個n的方法排一位,所以總的方法為d*n的復雜度。關鍵字也一樣,我們先排第3個關鍵字,在排第3個關鍵字,最后排第一個關鍵字。只有能保證每個關鍵字在n的時間復雜度完成,那么整個排序就是一個d*n的時間復雜度。所以總的速度是很快的。不過有一點就是要確保關鍵字能在n的時間復雜度完成。
14.桶排序:n的時間復雜度,穩定排序,非原地排序。主要思路和基數排序一樣,也是假設都在一個范圍例如概率都在0-1,而且分布還挺均勻,那么我們也是和基數排序一樣對一個數把他劃分在他指定的區域。然后在連接這些區域就可以了。書上對每個區域使用鏈表的存儲,我認為在寸小區域的時候也會有時間在里面。所以只是理論上的n時間復雜度。這種思路是不錯的。呵呵。
15.計數排序,基數排序,桶排序的比較,我覺得他們都很有思想,不過都是在特定情況下才能發揮最大的效果。雖然效率很高,但是用的不會很廣泛。他們之間我更喜歡計數排序,來個映射的方式就直接找到了自己的位置,很高明。和基數排序和同排序只是理論上的n時間復雜度,基數排序要確定一個關鍵字的排序是n復雜度的,桶排序要確定每個區域的排序是n復雜度的。
16.排序算法的最后感悟:黑格爾說過:存在即合理。所以這些排序的算法都是很好的,他確實給了我們思想上的幫助。感謝前人把精華留給了我們。我得到的收獲很大,總結一下各自排序的收獲:
冒泡:好實現,速度不慢,使用于輕量級的數據排序。
插入排序:也使用于小數據的排序,但是我從他的思想中學到怎么插入一個數據。呵呵,這樣就知道在排好的數據里面,不用再排序了,而是直接調用一下插入就可以了。
選擇排序:我學會了怎么去獲得最大值,最小值等方法。只要選擇一下,不就可以了。
合并排序:我學會分而治之的方法,而且在合并兩個數組的時候很適用。
堆排序:可以用它來實現優先隊列,而且他的思想應該給我加了很多內力。
快速排序:本來就用的最多的排序,對我的幫助大的都不知道怎么說好。
希爾排序:也是分治,讓我看到了分治的不同,原來還有這種思想的存在。
計數排序,基數排序,桶排序:特殊情況特殊處理。
附上我學習這里排序的連接

快速排序學習1            快速排序學習2(隨機化版本)

快速排序學習3(最初版)  快速排序學習4(最初版加隨機版)

插入排序   冒泡排序    選擇排序

希爾排序   合并排序  堆排序  用堆實現優先隊列

基數排序  計數排序

posted on 2009-04-25 19:30 shongbee2 閱讀(79083) 評論(17)  編輯 收藏 引用 所屬分類: 數據結構和算法

評論

# re: 排序算法總結[未登錄] 2009-04-25 22:10 R

shell sort 復雜度是n^lamda, lamda是大于1小于2的實數, 并非nlogn.   回復  更多評論   

# re: 排序算法總結 2009-04-26 00:30 shongbee2

@R
哦。謝謝,原來跟lamda有關系哈。呵呵,因為我每次都是折半,所以就誤認為是nlogn了。嘻嘻,謝謝哈。  回復  更多評論   

# re: 排序算法總結 2009-04-26 12:35 xcpp

研究排序算法的可以看看這個:http://www.sorting-algorithms.com/
動畫做的很牛逼  回復  更多評論   

# re: 排序算法總結 2009-04-26 21:29 shongbee2

@xcpp
謝謝您,我看了,可惜沒有怎么看懂。呵呵動畫太快樂。我再仔細看看吧。  回復  更多評論   

# re: 排序算法總結 2009-05-05 10:31

謝謝啊,我看了對我今后的學習還是有很大的幫助  回復  更多評論   

# re: 排序算法總結[未登錄] 2009-07-14 11:15 tao

收藏  回復  更多評論   

# re: 排序算法總結 2010-07-22 14:15 salever

我覺得他們的效率也是差不多的,我個人喜歡冒泡一些,因為要用它的時候數據多半不多,而且可以提前的返回已經排序好的數組。而其他兩個排序就算已經排好了,他也要做全部的掃描。

這里有點問題吧?選擇排序和冒泡的思想是一樣的,在已經排序的數組上使用它們仍然要進行o(n*n)的掃描,而插入則不是的。。。

而且在數據量在10000左右時,冒泡是最慢了,因為它還要進行大量的數據移動。  回復  更多評論   

# re: 排序算法總結 2010-07-22 14:22 salever

@salever
如果在冒泡里加上一個哨兵,那么在有序時基本不用掃描,這點忘記了哦。。。此時插入需要進行O(n)次掃描。。。  回復  更多評論   

# re: 排序算法總結 2011-04-05 21:59 光明頂左使

自從學完了大學數據結構課程之后,要排序時我總是直接去用庫函數(比如std::sort, qsort什么的),免得自己實現又麻煩又容易出錯...沒學那門課程時一直用冒泡...  回復  更多評論   

# re: 排序算法總結 2011-08-07 00:23 張良

總結的挺好的,正好最近在學習排序算法,幫助很大,謝謝作者,辛苦了……O(∩_∩)O~  回復  更多評論   

# re: 排序算法總結 2011-08-19 05:49 w7619c

簡單看了你的技術博克, 感覺很好. 排序法棒極了, 我在里面學會很多東西.
看了你學習openGL的過程, 呵呵, 可憐的家伙, 那東西貌似已經不怎么找人待見了,可以看看Flash+flex, 或者vrml, 也可以實現這些東西, 尤其是VRML可以直接由3DMax等3D渲染軟件直接生成, 更簡單也更酷了.
加油, 我們共同努力!!  回復  更多評論   

# re: 排序算法總結 2011-08-25 10:00 Kenny

選擇排序不是穩定排序  回復  更多評論   

# re: 排序算法總結 2012-03-09 15:51 哇卡

選擇排序真的不是穩定的。。。  回復  更多評論   

# re: 排序算法總結 2012-06-22 01:50 我是大熊

樓主總結的很好!樓下的評論也很給力!
我最近也在溫習算法!希望多跟大家交流!
這是我的博客:http://php.oil58.com/  回復  更多評論   

# re: 排序算法總結 2012-06-27 14:23 末葉

@R
不是說這個是不確定的嗎?  回復  更多評論   

# re: 排序算法總結 2012-12-24 20:55 seaeyes

粗粗看了下 文章錯誤很多啊 比如選擇排序是不穩定的 樓主說錯了

還有冒泡、插入、選擇排序三者的比較,冒泡公認是最慢的
另外樓主說排好的一列數如果加入一個,這時排序冒泡比其他兩個快,其實這時,冒泡和插入排序速度一樣,樓主可以寫個試試看  回復  更多評論   

# re: 排序算法總結 2013-01-22 15:03 wonder_wind

非常好  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久中文| 亚洲性线免费观看视频成熟| 久久精品国产精品亚洲综合| 国产欧美日本在线| 久久九九久久九九| 久久精品在这里| 久久激情网站| 亚洲亚洲精品在线观看| 欧美精品网站| 久久er99精品| 欧美日韩精品欧美日韩精品一 | 亚洲天堂av在线免费观看| 99视频精品全部免费在线| 国产在线国偷精品产拍免费yy| 亚洲电影在线播放| 欧美日韩三级视频| 亚洲国产成人91精品| 亚洲精品1区2区| 亚洲第一精品夜夜躁人人躁 | 欧美亚洲综合另类| 亚洲精品视频一区| 久久综合色一综合色88| 亚洲精品一区二区三区99| 亚洲精品黄色| 国产人成一区二区三区影院| 另类综合日韩欧美亚洲| 欧美激情女人20p| 午夜一区二区三区在线观看| 久久国产视频网站| 一个人看的www久久| 亚洲性图久久| 亚洲精品欧美日韩| 亚洲欧美日韩久久精品| 亚洲人成7777| 香蕉免费一区二区三区在线观看| 亚洲国产日韩欧美| 亚洲免费视频网站| 亚洲精品日韩在线| 久久精品人人做人人综合| 亚洲色在线视频| 另类国产ts人妖高潮视频| 午夜久久久久久| 欧美日韩不卡视频| 模特精品裸拍一区| 国产亚洲a∨片在线观看| 亚洲精品免费在线播放| 伊人久久大香线| 亚洲欧美视频一区| 亚洲在线第一页| 欧美人妖在线观看| 欧美电影免费观看大全| 国产在线精品成人一区二区三区 | 免费成人高清视频| 国产精品亚洲片夜色在线| 亚洲三级免费观看| 亚洲激情视频网| 久久久国产精品亚洲一区 | 美女网站久久| 黄色成人在线网址| 欧美亚洲在线| 久久riav二区三区| 国产精品免费观看视频| 一本色道综合亚洲| 亚洲视频999| 欧美日韩一区二区在线观看| 亚洲日本成人| 亚洲老板91色精品久久| 女仆av观看一区| 亚洲高清免费在线| 亚洲精品中文字幕有码专区| 你懂的国产精品永久在线| 欧美成年人网站| 亚洲国产一区二区三区青草影视| 久久人人97超碰精品888| 久久尤物视频| 亚洲国产成人高清精品| 另类人畜视频在线| 亚洲国产精品一区二区第四页av| 亚洲精一区二区三区| 欧美久久视频| 亚洲尤物影院| 久久久国产亚洲精品| 欧美成人午夜剧场免费观看| 在线欧美日韩| 欧美激情1区2区| 一区二区三区欧美在线| 欧美一区二区三区四区夜夜大片| 国产欧美一区二区三区在线老狼| 欧美一区二区三区的| 欧美福利在线| 亚洲视频在线观看网站| 国产女优一区| 欧美va亚洲va香蕉在线| 日韩亚洲不卡在线| 欧美专区在线| 91久久精品www人人做人人爽 | 性做久久久久久免费观看欧美| 老司机aⅴ在线精品导航| 亚洲精品一二| 国产精品制服诱惑| 免费一级欧美片在线观看| av不卡在线| 免费成人av在线看| 亚洲一区二区三区在线观看视频| 国产欧美一级| 欧美理论在线播放| 午夜免费日韩视频| 亚洲欧洲免费视频| 久久成人免费| 一区二区不卡在线视频 午夜欧美不卡在 | 在线视频日韩精品| 麻豆国产精品一区二区三区 | 日韩一级二级三级| 久久亚洲精品伦理| 亚洲一级电影| 亚洲韩国精品一区| 国产精品自拍网站| 欧美精品久久99久久在免费线| 欧美一级播放| 日韩午夜在线| 欧美激情第4页| 欧美影院一区| 亚洲一区二区三区免费观看| 亚洲国产精品久久久久秋霞不卡| 国产精品久久午夜夜伦鲁鲁| 欧美福利专区| 久久亚洲精品网站| 亚洲欧美在线网| 亚洲网站在线| 亚洲精品欧洲| 最新日韩在线| 亚洲风情亚aⅴ在线发布| 久热精品视频| 久久先锋资源| 久久午夜电影| 久久一区亚洲| 久久野战av| 久久人人97超碰国产公开结果 | 亚洲国产欧美一区二区三区同亚洲| 国产精品美女久久久久久2018| 欧美另类在线播放| 欧美国产日韩一区二区三区| 久久综合成人精品亚洲另类欧美| 久久都是精品| 久久久夜夜夜| 久久综合给合| 欧美在线亚洲一区| 亚洲自拍高清| 香蕉久久精品日日躁夜夜躁| 亚洲欧美在线一区二区| 午夜精品久久久久久久99水蜜桃| 亚洲一区二区三区影院| 午夜久久久久久| 久久精品九九| 欧美va天堂在线| 亚洲丁香婷深爱综合| 91久久久久久| 中国成人在线视频| 午夜电影亚洲| 久久夜色撩人精品| 欧美精品一区二区三区视频| 欧美日韩一区综合| 国产精品亚洲综合久久| 国产婷婷色综合av蜜臀av| 国产在线不卡精品| 亚洲激情第一页| 亚洲一区二区三区免费视频| 欧美一区在线看| 免费一级欧美在线大片| 亚洲精品1区| 亚洲婷婷综合色高清在线| 欧美一区二区视频免费观看| 老司机aⅴ在线精品导航| 欧美精品123区| 国产农村妇女精品一区二区| 在线观看亚洲视频| 一区二区国产日产| 久久久久成人精品免费播放动漫| 欧美国产一区在线| 亚洲深夜福利在线| 久久精品亚洲| 欧美特黄一区| 亚洲人体大胆视频| 欧美一级视频一区二区| 欧美激情精品久久久久久变态| 一区二区精品| 美女黄网久久| 国产一区二区三区四区hd| 亚洲作爱视频| 免费不卡亚洲欧美| 亚洲免费在线观看| 欧美激情一区二区三区高清视频| 国产视频精品网| 亚洲色图综合久久| 亚洲二区三区四区| 久久国产精品黑丝| 国产精品入口福利| 一区二区三区视频在线看| 毛片精品免费在线观看| 亚洲手机成人高清视频|