常用的排序演算法有以下幾類:插入排序(直接插入排序,希爾排序),選擇排序(簡單選擇排序,堆排序),交換排序(氣泡排序,快速排序),歸併排序,基數排序。排序方法選擇得當與否直接影響程式執行的速度和輔助儲存空間的占有量,進而影響整個軟體的效能。下面對這些演算法一一的介紹他們究竟是怎麼排的。
插入排序:
直接插入排序:插入到已經排好序的數列中的乙個資料。舉乙個形象的例子:在乙個排好隊打飯的對列中,張三是後來了,直接插到了佇列中李四的後邊,因為張三和李四是哥們兒。
希爾排序:將所有的資料分組,小組內進行排序,之後重新分組,組內資料增多,重新排序(每個步驟都使用直接插入排序)。舉乙個形象的例子:還是排隊打飯,學校有好多班級,不能所有班級都一起打,先按班級(分組)排好隊,最後所有的班級再組成乙個大組,再乙個乙個的排著打飯。
選擇排序:
簡單選擇排序:每次對剩餘的資料中選擇最小的和剩餘的這些資料中的第乙個進行交換。舉個例子:畢業了,大家都在照畢業照,大家站在那裡參差不齊,照相師傅一看,這可不行啊,瞅了一眼一下看到了最高的,好了,你就站到第乙個,接著瞅剩下最高的,站第二個……最後就成了乙個由高到低的佇列
堆排序:堆分為大頂堆(父節點大於子節點)和小頂堆(父節點小於子節點),根節點是最大的節點(或者最小的節點),每次挑出根節點之後,將剩餘的節點進行重新建堆。
交換排序:
氣泡排序:從後到前(或者從前到後)相鄰的兩個兩兩進行比較,不滿足要求就位置進行交換,一輪下來選擇出乙個最小(或最大)的放到了第乙個位置上(或最後位置),之後不考慮選出的元素,對剩餘的元素進行迴圈的排列。再舉乙個例子:我們在火車站買票有軍人、記者、***表優先的原則,大家排隊買票,這時來了乙個***表買票,他從後往前問買票的人是否是軍人、記者、***表,如果不是就和普通老百姓交換位置
快速排序:選出乙個關鍵字,比他小的放到他的左邊,大的放到右邊,設定兩個指標,同時與關鍵字進行比較。舉個例子:期末考試到了,考試完了我們要把成績排序,我們先選60為幾個分數,大於等於60分的排到一邊,小於60分的排到另一邊,之後對小於60分的同學和大於60分的同學進行同樣的排序。
歸併排序:
歸併排序就是相鄰兩個元素組成乙個組,組內進行排序,之後再將組內元素增加,迴圈比較
基數排序:
基數排序就是先對各位進行比較,進行排序,再對十位進行比較,進行排序……最後對最高位進行比較,進行排序。舉個例子:每年在大學裡我們都要進行評優,什麼樣的學生是最優的學生?各方面都要進行比較——成績、人品、道德等
最後我們來總結一下各類排序演算法的時間複雜度和空間複雜度,並進行對比:
大學原來是這麼美好
人的一生會失去很多東西,有的追逐一生也得不到,有的短暫的擁有卻最終失去!我們一生都在為這些得到與得不到而苦腦 徘徊。我的大學時光也就這樣在揮揮噁噁的荒度了!記得大二時曾看過一部 大學我被你上了 記得當時在圖書館偶然看到這本書的時候,還以為是講一段美妙的大學愛情故事呢,等近不急待的看完了整部 才發現原...
快速排序 原來是這樣
咚咚咚,開講啦!今天呢,讓我們來看看一種快速的排序方法,哈哈,它的名字就叫做快速排序,時間複雜度 o nlogn 首先呢,以第乙個數 為了方便 為基準數也可以叫參照數,隨你怎麼叫,就是拿來參照的。比如 這樣一組亂序的數字 i j 6 1 2 7 9 3 4 5 10 8 小i站在 6 上面,小j站在...
MacBook風扇這麼響,原來是這些細節沒在意!
偶爾會有一點熱量是正常現象 mac可以應付這些熱量。但是,當您一直聽到macbook air風扇的噪音時,您的計算機可能會過熱,這可能是由於您要執行的任務太難使cpu和ram無法處理,或者是因為macbook風扇控制系統無法正常工作。過熱是危險的,因為它本質上是螺旋式下降 cpu和ram變熱,因為它...