1 [書] 分解成小的功能函式,增加思路自信和邊界自信!
每次拿出最小的 放前面排排隊
def
smallest_pos
(alist, left, right)
: small = alist[left]
smallest_pos = left
for i in
range
(left, right)
:# 恰好left從2 3開始,對應下標正好為alist的原下標
if alist[i]
< small:
small = alist[i]
smallest_pos = i
return smallest_pos
defexchange
(alist, i, j)
: alist[i]
, alist[j]
= alist[j]
, alist[i]
defselect_sort
(alist)
: n =
len(alist)
for i in
range
(n):
s_pos = smallest_pos(alist, i, n)
exchange(alist, s_pos, i)
return alist
2 自a的好,答案的還用on個空間複雜度,不過它分解成小函式的方法可以一試
def
select_sort
(alist)
: n =
len(alist)
for i in
range
(n-1):
max_pos = i # 重要:因為下面的max_pos在if裡,可能執行不到,導致後面下標max_pos沒有建立
for j in
range
(i+1
, n)
:if alist[j]
> alist[i]
:max
= alist[j]
max_pos = j
'''交換最大值到應該的位置'''
alist[max_pos]
, alist[i]
= alist[i]
,max
# 若max就是alist[i], 這句就相當於沒交換,正確的!
return alist
排序 2 選擇排序
工具方法類 package mydatastructrueadndalgorith.three.arrsort 陣列為模板排序演算法中的一些公用的模板方法 建立人 曹雪坤 version 1.0.0 public class example 遍歷陣列 public static void show ...
排序 選擇排序(2)
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方...
排序2 選擇排序 選擇排序 堆排序
選擇排序,依次找到資料集n n 1 n 2 中比它大 小的最大 最小者,最終達到全部資料有序。1 選擇排序 直接的依次找到資料集合n n 1 n 2.的最大 最小者形成排序,非常好理解。選擇排序可能是和氣泡排序一樣,最直觀能想到的排序方法。顯然選擇排序和氣泡排序一樣,無所謂最好 最壞 平均,選擇排序...