Python語言之選擇排序

2021-09-19 10:29:23 字數 1505 閱讀 9811

選擇排序

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

選擇排序分析

selection-sort-animation 紅色表示當前最小值,黃色表示已排序序列,藍色表示當前位置。

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], alist[i]

alist = [54,226,93,17,77,31,44,55,20]

selection_sort(alist)

print(alist)

時間複雜度

最優時間複雜度:o(n2)

最壞時間複雜度:o(n2)

穩定性:不穩定(考慮公升序每次選擇最大的情況)

# coding = utf-8

# 選擇排序

def select_sort(lst):

for i in range(len(lst) - 1): # 只迴圈len(lest)-1次

k = i # k 是已知最小元素位置

for j in range(i, len(lst) - 1):

if lst[j] < lst[k]:

k = j

if i != k: # lst[k]是確定的最小元素,檢查是否需要交換

lst[i], lst[k] = lst[k], lst[i]

if __name__ == '__main__':

li = [17, 26, 31, 44, 54, 55, 77, 77, 20]

print(li)

select_sort(li)

print(li)

JAVA語言之選擇排序

選擇排序 將第乙個數的下表標記好為min,然後在內迴圈裡面一次和當前下標的下乙個進行大小的比較,然後將小的那個數下標給與min,然後進行迴圈,最後將min標記的值和第乙個數進行交換 package com.paixu public class xuanze int n 5 selectionsort...

C語言之排序演算法 選擇法排序

include include include define arraynum 10 int sortarraycreate int num for int i 0 ireturn ptr void sort int ptr,int num if ischange int main int argc...

Python語言之函式

函式 函式構造 def 函式名 形參名1 形參名2 return 待返回引數 函式呼叫 函式名 實參1 實參2 注意 利用函式程式設計的方法 函式套用 結構化程式設計 問題求解 自上而下分解問題,再自下而上設計函式利用函式巢狀求解問題 至下而上的設計程式結構 全域性變數 寫在主程式的形參 區域性變數...