python數據結構與算法(13)
阿新 • • 發佈:2018-11-29
演示 依靠 51cto 復雜 因此 int fff 記錄 != 選擇排序
選擇排序(Selection sort)是?種簡單直觀的排序算法。它的?作原理如 下。?先在未排序序列中找到最?(?)元素,存放到排序序列的起始位 置,然後,再從剩余未排序元素中繼續尋找最?(?)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。
選擇排序的主要優點與數據移動有關。如果某個元素位於正確的最終位置 上,則它不會被移動。選擇排序每次交換?對元素,它們當中?少有?個將 被移到其最終位置上,因此對n個元素的表進?排序總共進??多n-1次交 換。在所有的完全依靠交換去移動元素的排序?法中,選擇排序屬於?常好 的?種。
選擇排序分析
排序過程:
選擇排序(Selection sort)是?種簡單直觀的排序算法。它的?作原理如 下。?先在未排序序列中找到最?(?)元素,存放到排序序列的起始位 置,然後,再從剩余未排序元素中繼續尋找最?(?)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。
選擇排序的主要優點與數據移動有關。如果某個元素位於正確的最終位置 上,則它不會被移動。選擇排序每次交換?對元素,它們當中?少有?個將 被移到其最終位置上,因此對n個元素的表進?排序總共進??多n-1次交 換。在所有的完全依靠交換去移動元素的排序?法中,選擇排序屬於?常好 的?種。
選擇排序分析
排序過程:
def selection_sort(alist): n = len(alist) # 需要進?n-1次選擇操作 for i in range(n-1): # 記錄最?位置 min_index = i # 從i+1位置到末尾選擇出最?數據 for j in range(i+1, n): if alist[j] < alist[min_index]: min_index = j # 如果選擇出的數據不在正確位置,進?交換 if min_index != i: alist[i], alist[min_index] = alist[min_index], al ist[i] alist = [54,226,93,17,77,31,44,55,20] selection_sort(alist) print(alist)
時間復雜度
最優時間復雜度:O(n ) 最壞時間復雜度:O(n ) 穩定性:不穩定(考慮升序每次選擇最?的情況)
選擇排序演示
插?排序
插?排序(英語:Insertion Sort)是?種簡單直觀的排序算法。它的?作原 理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描, 找到相應位置並插?。插?排序在實現上,在從後向前掃描過程中,需要反 復把已排序元素逐步向後挪位,為最新元素提供插?空間。
插?排序分析
def insert_sort(alist): # 從第?個位置,即下標為1的元素開始向前插? for i in range(1, len(alist)): # 從第i個元素開始向前?較,如果?於前?個元素,交換位置 for j in range(i, 0, -1): if alist[j] < alist[j-1]: alist[j], alist[j-1] = alist[j-1], alist[j] alist = [54,26,93,17,77,31,44,55,20] insert_sort(alist) print(alist)
時間復雜度
最優時間復雜度:O(n) (升序排列,序列已經處於升序狀態) 最壞時間復雜度:O(n ) 穩定性:穩定
插?排序演示
python數據結構與算法(13)