# 選擇排序:選擇極大或極小值,跟第乙個進行交換lst = [1, 3, 9, 8, 5, 2, 7, 4, 6]
length = len(lst)
for i in range(length):
maxvalueindex = i # 先假定第乙個為最大值
for j in range(i+1, length): # 從第二個開始跟第乙個比較
if lst[j] > lst[maxvalueindex]:
maxvalueindex = j;
if i != maxvalueindex: # 找到最大值的index後,進行交換
tmp = lst[i]
lst[i] = lst[maxvalueindex]
lst[maxvalueindex] = tmp
print(lst)
print('-------------------------------------')
# 選擇排序:優化 - 每趟分別找到最大值和最小值
lst = [1, 3, 9, 8, 5, 2, 7, 4, 6]
length = len(lst)
for i in range(length // 2): # 迴圈少一半
maxvalueindex = i # 先假定第乙個為最大值
minvalueindex = -i-1 # 假定最後乙個為最小值
minorigin = minvalueindex # 記錄最小值的原始index
for j in range(i+1, length-i): # 從第二個開始跟第乙個比較
if lst[j] > lst[maxvalueindex]:
maxvalueindex = j
if lst[- j - 1] < lst[minvalueindex]:
minvalueindex = - j - 1
if i != maxvalueindex: # 找到最大值的index後,進行交換
tmp = lst[i]
lst[i] = lst[maxvalueindex]
lst[maxvalueindex] = tmp
# 如果最小值被交換過,更新索引
if i == minvalueindex or i == length + minvalueindex:
minvalueindex = maxvalueindex
# 最小值索引不同,但值相同,不用交換了
if minorigin != minvalueindex and lst[minorigin] != lst[minvalueindex]:
tmp = lst[minorigin]
lst[minorigin] = lst[minvalueindex]
lst[minvalueindex] = tmp
print(lst)
print('-------------------------------------')
# 選擇排序:優化 - 最大值最小值相等,跳出迴圈
lst = [1, 3, 9, 1, 1, 1, 1, 1, 1]
length = len(lst)
for i in range(length // 2): # 迴圈少一半
maxvalueindex = i # 先假定第乙個為最大值
minvalueindex = -i-1 # 假定最後乙個為最小值
minorigin = minvalueindex # 記錄最小值的原始index
for j in range(i+1, length-i): # 從第二個開始跟第乙個比較
if lst[j] > lst[maxvalueindex]:
maxvalueindex = j
if lst[- j - 1] < lst[minvalueindex]:
minvalueindex = - j - 1
# 如果元素相同,結束迴圈
if lst[maxvalueindex] == lst[minvalueindex]:
break
if i != maxvalueindex: # 找到最大值的index後,進行交換
tmp = lst[i]
lst[i] = lst[maxvalueindex]
lst[maxvalueindex] = tmp
# 如果最小值被交換過,更新索引
if i == minvalueindex or i == length + minvalueindex:
minvalueindex = maxvalueindex
# 最小值索引不同,但值相同,不用交換了
if minorigin != minvalueindex and lst[minorigin] != lst[minvalueindex]:
tmp = lst[minorigin]
lst[minorigin] = lst[minvalueindex]
lst[minvalueindex] = tmp
print(lst)
Python 選擇排序
coding utf 8 選擇排序 在所有記錄中選擇最小的乙個元素,與第乙個記錄交換,依次,在其餘的記錄中選擇最小的元素與第二個元素交換 def sellectsort list list 4,1,9,13,34,26,10,7,4 m len list if m 2 如果是空表或只有乙個元素,返回...
python選擇排序
選擇排序是不穩定的排序方法 比如序列 5,5,3 第一次就將第乙個 5 與 3 交換,導致第乙個5挪動到第二個5後面 data set 9,1,22,31,45,3,6,2,11 smallest num index 0 初始列表最小值,預設為第乙個 loop count 0 for j in ra...
選擇排序python
python 選擇排序 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。菜鳥教程的圖很清...