數據結構與算法中的排序

什麼是排序
排序(sorting) )的功能是將一個數據元素的任意序列,重新排列成一個按關鍵字有序的序列。
其確切的定義爲:
假設有n個數據元素的序列{R 1 , R 2 , … , R n },其相應關鍵字的序列是{K 1 , K 2 , … , K n },
通過排序要求找出下標 1 , 2 , … , n的一種排列p 1 , p 2 , … , p n ,使得相應關鍵字滿足如下的非遞減(或非遞增)關係
Kp 1 ≤ Kp 2 ≤ … ≤ Kp n
這樣,就得到一個按關鍵字有序的紀錄序列:{ Rp 1 , Rp 2 , … , Rp n }

內部排序和外部排序
    一類是整個排序過程在內存儲器中進行,稱爲內部排序;
    另一類是由於待排序元素數量太大,以至於內存儲器無法容納全部數據,排序需要藉助外部存儲設備才能完成,這類排序稱爲外部排序。
    本章介紹的排序方法都屬於內部排序

穩定排序和不穩定排序
    如果在待排序的序列中存在多個具有相同關鍵字的元素。
    假設K i =K j (1≤ i≤ n,1≤ j≤ n,i≠j),若在排序之前的序列中R i 在R j 之前,
    經過排序後得到的序列中R i 仍然在R j 之前,則稱所用的排序方法是 穩定的;
    否則,當相同關鍵字元素的前後關係在排序中發生變化,則稱所用的排序方法是 不穩定的。

    無論是穩定的還是不穩定的排序方法,均能完成排序的功能。
    在某些場合可能對排序有穩定性的要求,此時就應當選擇穩定的排序方法。
    例如,假設一組學生紀錄已經按照學號有序,現在需要根據學生的成績排序,當分數相同時要求學號小的學生在前,
    顯然此時對分數進行排序就必須選擇穩定的排序方法。
    
排序前 ( 56, 34, 47, 23, 66, 18, 82, 47 )
若排序後得到結果( 18, 23, 34, 47, 47, 56, 66, 82 ),則稱該排序方法是穩定的
若排序後得到結果( 18, 23, 34, 47, 47, 56, 66, 82 ),則稱該排序方法是不穩定的

比較排序和非比較排序
    大部分排序都是需要通過比較首先來判斷大小,作爲排序的依據的。
    但是也有例外的,比如計數排序、基數排序,不需要進行比較。
    
插入排序:將無序子序列中的一個或幾個記錄“插入”到有序序列中,從而增加記錄的有序子序列的長度
交換排序:通過“交換”無序序列中的記錄從而得到其中關鍵字最小或最大的記錄,並將它加入到有序子序列中,以此方法增加記錄的有序子序列的長度
選擇排序:從記錄的無序子序列中“選擇”關鍵字最小或最大的記錄,並將它加入到有序子序列中,以此方法增加記錄的有序子序列的長度
歸併排序:通過“歸併”兩個或兩個以上的記錄有序子序列,逐步增加記錄有序序列的長度

排序類型

    
 
    一般說是八大排序類型
    另外還可以加上非比較的計數排序、選擇排序中的樹形選擇排序、插入排序中的折半插入排序    

排序效率

     
時間複雜度最高的就是三種基本排序:直接插入、簡單選擇、冒泡排序。

建議優先掌握直接插入、簡單選擇、冒泡排序、快速排序
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章