排列的學習資料 資料結構與演算法

2022-03-25 10:58:08 字數 1588 閱讀 2769

如果按排序過程中依據的不同原則對內部排序方法進行分類,大致可分為5類:插入排序、交換排序、選擇排序、歸併排序和分配排序;如果按排序過程中所需的工作量來區分,則可分為3類:

1、簡單的排序方法,其時間複雜度為 o(n2)

2、改進的排序方法,其時間複雜度為o(nlog2n);

3、基數排序,其時間度為o(d*n)。

排序過程只有兩種基本操作:比較記錄和移動記錄。

常用的基本排序演算法有5種:

·插入排序(insertionsort),有直接插入排序、二分法插入排序、希爾(shell)排序。

·交換排序(exchangesort),有氣泡排序、快速排序(分割槽交換排序)。

·選擇排序(selectionsort) ,有直接選擇排序、堆排序。

·歸併排序(mergesort)

·分布排序(distributionsort),又稱基數排序。

為了形象地解釋每種排序演算法是怎樣工作的,讓我們來看一看怎樣用這些方法對桌上一付亂序的牌進行排序。牌既要按花色排序(依次為梅花、方塊、紅桃和黑心),還要按點數排序(從2到a)。

插入排序的過程為:從一堆牌的上面開始拿牌,每次拿一張牌,按排序原則把牌放到手中正確的位置。桌上的牌拿完後,手中的牌也就排好序了。

交換排序的過程為:

(1)先拿兩張牌放到手中。如果左邊的牌要排在右邊的牌的後面(左邊的花色或者點數比右邊大),就交換這兩張牌的位置。

(2)然後拿下一張牌,並比較最右邊兩張牌,如果有必要就交換這兩張牌的位置。

(3)重複第(2)步,直到把所有的牌都拿到手中。

(4)如果不再需要交換手中任何兩張牌的位置,就說明牌已經排好序了;否則,把手中的牌放到桌上,重複(1)至(4)步,直到手中的牌排好序。

選擇排序的過程為:在桌上的牌中找出最小的一張牌,拿在手中;重複這種操作,直到把所有牌都拿在手中。

歸併排序的過程為:把桌上的牌分為52堆,每堆為一張牌。因為每堆牌都是有序的(記住,此時每堆中只有一張牌),所以如果把相鄰的兩堆牌合併為一堆,並對每堆牌進行排序,就可以得到26堆已排好序的牌,此時每一堆中有兩張牌。重複這種合併操作,就可以依次得到13堆牌(每一堆中有4張牌),7堆牌(有6堆是8張牌,還有一堆是4張牌),最後將得到52張的一堆牌。

分布排序(也被稱作radix sort,即基數排序)的過程為:先將牌按點數分成13堆,然後將這13堆牌按點數順序疊在一起;再將牌按花色分成4堆,然後將這4堆牌按花色順序疊在一起,牌就排好序了。

二、為什麼是n2 ,nlog2n 或 d*n?

排序的過程,實質就是乙個插入的過程。

簡單的排序演算法就是把第n個數插入到其它(n-1)個數的過程。n個數共需要插入n(n-1)次,所以其時間複雜度不超過n2。

改進的排序演算法基本思路是「分解」:選擇乙個恰當的關鍵字,把乙個排序任務分解成兩個小的排序任務。理想情況下,關鍵字總能把原來的排序任務分解成兩組長度相等的排序任務。於是,在下一輪的排序中,只需要在本小組內進行比較(長度是上一輪的1/2)。這個過程相當於一棵倒過來的二叉排序樹。根椐n個資料元素生成一棵二叉排序樹,相當於進行n次在二叉排序樹上插入乙個新結點的操作,因而其時間複雜度不超過o(nlog2n)。

參考資料:c語言程式設計常見問題解答 pauls s.r.chisholm 等著 張芳妮 呂波譯 清華大學出版社2023年版

資料結構與演算法 01 如何學習資料結構與演算法

過於學術的概念定義比較抽象,難以理解。我們從廣義和狹義兩個層面,來理解資料結構與演算法這兩個概念。從廣義上講,資料結構就是指一組資料的儲存結構 怎麼放 演算法就是運算元據的一組方法 怎麼用 我們以圖書館的場景為例來進一步理解 圖書館書籍量十分巨大,首先要分類設定閱覽室,譬如社科類 科技類 報刊類等。...

資料結構與演算法的學習

自動生成前十個質數的演算法 具體的 請看 cindy.cs 1 設定兩個計數器 counter1 2 counter2 2 2 如果 counter1 10,則執行3 如果counter1 大於10 則執行6 3 當counter2 counter1 則執行4如果 counter2 大於counte...

資料結構與演算法(2) 棧和排列

棧 是乙個後進先出 last in first out,lifo 的線性表,它要求 只在表尾 進行刪除和插入操作。所謂的棧,其實就是乙個特殊的線性表 順序表,鍊錶 但是它在操作上有一些特殊的要求和限制 其中。對於棧來說,這個表尾稱為棧的棧頂 top 相應的表頭稱為棧底 bottom 棧的插入操作 p...