1. 程式人生 > >資料結構中排序、查詢、最小生成樹演算法總結

資料結構中排序、查詢、最小生成樹演算法總結

1.排序演算法 定義:把一個無序元素序列按照元素的關鍵字遞增或遞減排列為有序的序列 在這裡插入圖片描述 一、插入排序 1)直接插入排序: 基本思想:假設前i-1個元素已經有序,將第i個元素的關鍵字與前i-1個元素的關鍵 字進行比較,找到合適的位置,將第i個元素插入。按照類似的方法,將剩下的元素依次插入到已經有序的序列中,完成插入排序。

例如:對序列(45,23,56,12,97,76,29,68)進行直接插入排序。 在這裡插入圖片描述 在這裡插入圖片描述 2)希爾排序(縮小增量排序) 基本思想:通過將待排序的元素分為若干個子序列,利用直接插入排序思想對子序列進行排序。然後將該子序列縮小,接著對子序列進行直接插入排序。按照這種思想,直到所有元素都按照關鍵字有序排列。

例如:利用希爾排序的演算法思想,對序列(56,22,67,32,59,12,89,26,48,37)進行排序。 在這裡插入圖片描述 在這裡插入圖片描述 二、選擇排序: 1)簡單選擇排序 基本思想:假設待排序的元素序列有n個,第一趟排序經過n-1次比較,從n個元素序列中選擇關鍵字最小的元素,將其放在第一個位置。第二趟排序從剩餘的n-1個元素中,經過n-2次比較,選擇關鍵字最小的元素,將其放在第二個位置。依次類推,直到沒有待比較的元素,簡單選擇排序演算法結束。

例如:給定一組元素序列,其元素的關鍵字為(56,22,67,32,59,12,89,26),簡單選擇排序的過程如下。 在這裡插入圖片描述 在這裡插入圖片描述 2)堆排序 基本思想:主要利用二叉樹的樹形結構。Step 1:將長度為n的待排序列進行堆有序化構造成一個大頂堆;Step 2:將根節點與尾節點交換並輸出此時的尾節點;Step 3:將剩餘的n-1個節點重新進行堆有序化;Step 4:重複Step 2、Step 3直至構造成一個有序序列。

三、交換排序 1)氣泡排序: 基本思想:從第一個元素開始,依次比較相鄰兩個元素,若兩個元素逆序,則進行交換。假設元素序列中有n個待比較的元素,第一趟排序結束,最大的元素移到第n個位置。在第二趟排序結束,就會將關鍵字次大的元素移動到第n-1個位置。依次類推,經過n-1趟排序後,元素序列構成一個有序的序列。

例如:對序列(56,22,67,32,59,12,89,26,48,37)進行氣泡排序。 在這裡插入圖片描述 在這裡插入圖片描述 2)快速排序 基本思想:設要排序的陣列A[0]……A[N-1],任選一個數據(通常選陣列的第一個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序;然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程遞迴進行,以此達到整個序列有序。

例如:對序列(37,19,43,22,22,89,26,92)快速排序。 在這裡插入圖片描述 在這裡插入圖片描述 三、歸併排序 基本思想:將兩個或兩個以上的有序序列組合,使其成為一個有序序列。

例如:對序列 (37,19,43,22,57,89,26,92)進行2路歸併排序。 在這裡插入圖片描述 在這裡插入圖片描述 四、基數排序 基本思想:將整數按位數切割成不同的數字,然後按每個位數分別比較。將所有待比較數值統一為同樣的數位長度,數位較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後, 數列就變成一個有序序列。

例如:對序列(53, 3, 542, 748, 14, 214, 154, 63, 616)進行基數排。 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述