C#資料結構與演算法4-C# 簡單排序方法

firespeed發表於2024-10-26

一 排序

排序(Sort)是計算機程式設計中的一種重要操作,也是日常生活中經常遇到的問題。例如,字典中的單詞是以字母的順序排列,否則,使用起來非常困難。同樣,儲存在計算機中的資料的次序,對於處理這些資料的演算法的速度和簡便性而言,也具有非常深遠的意義。

二 基本概念

排序是把一個記錄(在排序中把資料元素稱為記錄)集合或序列重新排列成按記錄的某個資料項值遞增(或遞減)的序列。
下表是一個學生成績表,其中某個學生記錄包括學號、姓名及計算機文化基礎、C 語言、資料結構等課程的成績和總成績等資料項。在排序時,如果用總成績來排序,則會得到一個有序序列;如果以資料結構成績進行排序,則會得到另一個有序序列。

作為排序依據的資料項稱為“排序項”,也稱為記錄的關鍵碼(Keyword)。關鍵碼分為主關鍵碼(Primary Keyword)和次關鍵碼(Secondary Keyword)。一般地,若關鍵碼是主關鍵碼,則對於任意待排序的序列,經排序後得到的結果是唯一的;若關鍵碼是次關鍵碼,排序的結果不一定唯一,這是因為待排序的序列中可能存在具有相同關鍵碼值的記錄。此時,這些記錄在排序結果中,它們之間的位置關係與排序前不一定保持一致。如果使用某個排序方法對任意的記錄序列按關鍵碼進行排序,相同關鍵碼值的記錄之間的位置關係與排序前一致,則稱此排序方法是穩定的;如果不一致,則稱此排序方法是不穩定的。
由於待排序的記錄的數量不同,使得排序過程中涉及的儲存器不同,可將排序方法分為內部排序(Internal Sorting)和外部排序(External Sorting)兩大類。
內部排序指的是在排序的整個過程中,記錄全部存放在計算機的記憶體中,並且在記憶體中調整記錄之間的相對位置,在此期間沒有進行內、外存的資料交換。外部排序指的是在排序過程中,記錄的主要部分存放在外存中,藉助於記憶體逐步調整記錄之間的相對位置。在這個過程中,需要不斷地在內、外存之間交換資料。

三 直接插入排序

插入排序的基本操作就是將一個資料插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為O(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後一個元素除外(讓陣列多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。

四 氣泡排序

氣泡排序(Bubble Sort)的基本思想是:將相鄰的記錄的關鍵碼進行比較,若前面記錄的關鍵碼大於後面記錄的關鍵碼,則將它們交換,否則不交換。

五 簡單選擇排序

簡單選擇排序(Simple Select Sort)演算法的基本思想是:從待排序的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第一個記錄交換位置;然後從不包括第一個位置上的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第二個記錄交換位置;如此重複,直到序列中只剩下一個記錄為止。

相關文章