謝謝大家對小白的支持,上週更新的冒泡排序,幾個點贊也是莫大的鼓勵,很開心有朋友留言,說還想看選擇排序和堆排序。
最近在博客的評論區認識了一些並肩奮戰的小夥伴,有朋友說每天都來看我的博客,也有朋友認真實現我的代碼後及時指出錯誤,有朋友也會和我分享他的面經 說是回報我一直的分享~ 這些都是我最初的最初沒想過、也沒想到的。今天,第一次粉絲數量超越了原創數量,評論區也多了很多交流和鼓勵,不再是我一個人不停的寫不停的學。我就是很開心,起初自己寫給自己的博客,竟然發揮着一點點的影響力,認真的付出被大家認真的對待。嘻嘻,謝謝你們。
不要煽情了,說一說選擇排序。
1.1 實現過程
以 [3,5,4,2,1]
從小到大排序,看看選擇排序實現的中間步驟。
1.2 關鍵思路
和冒泡排序一樣,簡單選擇排序也是一輪一輪的,每一輪排好一個最值的位置,再不斷縮小比較範圍。
每一輪中,
- 設定基準(本例中,以比較範圍內,第一個元素爲基準);
- 更新最小值下標;
- 交換基準與最值的位置(本例中,是選取最小值)。
這樣,每一輪結束後,最小值都被往前排。
下一輪,則縮小範圍,對未排序的區域重複以上過程。
1.3 代碼實現
def SelectSort(arr):
n = len(arr)
for i in range(0, n):
min_index = i # 設定基準
for j in range(i+1, n):
if arr[j] <= arr[min_index]:
min_index = j #更新最小值下標
arr[i], arr[min_index] = arr[min_index], arr[i] # 交換基準與最值的位置
return arr
1.4 結合代碼和中間過程,再次體會
1.5 評價
-
每輪操作O(n)次,共O(n)輪,時間複雜度O(n^2)。
-
額外空間開銷出在交換數據時那一個過渡空間,空間複雜度O(1)。
你們還想看什麼?
❤️ 「更多編程題」