day 2 演算法題:寫出選擇排序
又找到乙個更小的值2,重新標記它為紅色:
一輪比較後,找到最小值2並標記為黃色,表示就位,繼續在未排序序列中尋找最小值:
#錯誤出在這裡,換位置是都要帶著元素再列表中的索引的,這裡相當於用min的值替換了j位置的值
return our_list #並沒有實現交換位置
list=[
1,5,
3,2,
8]b = selec_sort(
list
)b
[1, 5, 5, 5, 8]
#改正
defselec_sort
(our_list)
: n =
len(our_list)
count =
0for i in
range
(n-1):
min= our_list[i]
for j in
range
(i+1
,n):
ifmin
> our_list[j]
: our_list[i]
, our_list[j]
= our_list[j]
, our_list[i]
count +=
1print
('交換次數'
,count)
return our_list
list=[
1,5,
3,2,
8]b = selec_sort(
list
)b
交換次數 3
[1, 2, 3, 5, 8]
def
selec_sort
(our_list)
: n =
len(our_list)
count =
0#統計交換的次數
for i in
range
(n-1):
min_index = i #最小值的索引標籤
for j in
range
(i+1
, n):if
list
[j]<
list
[min_index]
: min_index = j #這裡不交換,僅僅是存起來
if min_index != i:
#加入判斷,以防不需要交換的情況
our_list[i]
, our_list[min_index]
= our_list[min_index]
, our_list[i]
count +=
1print
('交換次數'
,count)
return our_list
list=[
1,5,
3,2,
8]b = selec_sort(
list
)b
交換次數 1
[1, 2, 3, 5, 8]
可以看到跟原來演算法相比減少了交換的次數 Day2 選擇排序
參考本文對選擇排序的一些提示,在星球內記錄 及思考過程。選擇排序是一種簡單直觀的排序演算法,無論什麼資料進去都是 o n 的時間複雜度。所以用到它的時候,資料規模越小越好。唯一的好處可能就是不占用額外的記憶體空間了吧。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置 再從剩餘未排序元素...
快速排序 day 2
問題 給定乙個長度為n的整數數列,以及乙個整數k。請用快速選擇演算法求出數列的第k小的數是多少。輸入格式 第一行包含兩個整數 n 和 k。第二行包含 n 個整數 所有整數均在1 1000000範圍內 表示整數數列。輸出格式 輸出乙個整數,表示數列的第k小數。資料範圍 1 n 1000000,1 k ...
Day2 氣泡排序bubble sort
氣泡排序bubble sort 冒泡演算法,取list中從第乙個元素開始,與它後面的元素比較,如果比它大,就交換位置,一直重複到它能到達的位置,每次遍歷都將 剩下的元素中最大的那個放在序列的最後,如如果完成排序,則可以退出了。輪詢次數為 list 1次,並且每輪詢一次list的數量減去1 pytho...