• 排序算法原來是這么排的

    0
    .NET 算法 C/C++ 9964 次瀏覽
           常用的排序算法有以下幾類:插入排序(直接插入排序,希爾排序),選擇排序(簡單選擇排序,堆排序),交換排序(冒泡排序,快速排序),歸并排序,基數排序。排序方法選擇得當與否直接影響程序執行的速度和輔助存儲空間的占有量,進而影響整個軟件的性能。下面對這些算法一一的介紹他們究竟是怎么排的。

            

    插入排序:

             直接插入排序:插入到已經排好序的數列中的一個數據。舉一個形象的例子:在一個排好隊打飯的對列中,張三是后來了,直接插到了隊列中李四的后邊,因為張三和李四是哥們兒。

    排序算法原來是這么排的

             希爾排序:將所有的數據分組,小組內進行排序,之后重新分組,組內數據增多,重新排序(每個步驟都使用直接插入排序)。舉一個形象的例子:還是排隊打飯,學校有好多班級,不能所有班級都一起打,先按班級(分組)排好隊,最后所有的班級再組成一個大組,再一個一個的排著打飯。

    排序算法原來是這么排的


    選擇排序:

             簡單選擇排序:每次對剩余的數據中選擇最小的和剩余的這些數據中的第一個進行交換。舉個例子:畢業了,大家都在照畢業照,大家站在那里參差不齊,照相師傅一看,這可不行啊,瞅了一眼一下看到了最高的,好了,你就站到第一個,接著瞅剩下最高的,站第二個……最后就成了一個由高到低的隊列

    排序算法原來是這么排的

             堆排序:堆分為大頂堆(父節點大于子節點)和小頂堆(父節點小于子節點),根節點是最大的節點(或者最小的節點),每次挑出根節點之后,將剩余的節點進行重新建堆。


    交換排序:

             冒泡排序: 從后到前(或者從前到后)相鄰的兩個兩兩進行比較,不滿足要求就位置進行交換,一輪下來選擇出一個最小(或最大)的放到了第一個位置上(或最后位置),之 后不考慮選出的元素,對剩余的元素進行循環的排列。再舉一個例子:我們在火車站買票有軍人、記者、兩會代表優先的原則,大家排隊買票,這時來了一個兩會代 表買票,他從后往前問買票的人是否是軍人、記者、兩會代表,如果不是就和普通老百姓交換位置

             快速排序選 出一個關鍵字,比他小的放到他的左邊,大的放到右邊,設置兩個指針,同時與關鍵字進行比較。舉個例子:期末考試到了,考試完了我們要把成績排序,我們先選 60為幾個分數,大于等于60分的排到一邊,小于60分的排到另一邊,之后對小于60分的同學和大于60分的同學進行同樣的排序。


    歸并排序:

    歸并排序 就是相鄰兩個元素組成一個組,組內進行排序,之后再將組內元素增加,循環比較


    基數排序:

             基數排序 就是先對各位進行比較,進行排序,再對十位進行比較,進行排序……最后對最高位進行比較,進行排序。舉個例子:每年在大學里我們都要進行評優,什么樣的學生是最優的學生?各方面都要進行比較——成績、人品、道德等

     

    最后我們來總結一下各類排序算法的時間復雜度和空間復雜度,并進行對比:

    排序算法原來是這么排的

    轉自:http://blog.csdn.net/xudepeng0813/article/details/7591883

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色