前言
在編程的世界里,排序算法如同一顆璀璨的明珠,閃耀著智慧的光芒。它不僅是計算機科學的基礎知識點,更是每一位程序員必備的技能。今天,就讓我們一同走進排序算法的世界,深入探究冒泡排序、選擇排序、插入排序、快速排序、歸并排序、堆排序這六大經典算法的精髓所在,為你提供一份全面、深入、實用的指南。
一、冒泡排序:簡單易懂的入門算法
冒泡排序是一種簡單直觀的排序算法,它重復地走訪過要排序的數列,依次比較相鄰的兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重復地進行,直到沒有再需要交換的元素為止。這種算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。
算法原理:
假設我們有一個數組 [5, 3, 8, 4, 2]
,在第一輪排序中,5 和 3 比較,5 大于 3,交換它們的位置,變為 [3, 5, 8, 4, 2]
;接著 5 和 8 比較,5 小于 8,不交換;8 和 4 比較,8 大于 4,交換,變為 [3, 5, 4, 8, 2]
;最后 8 和 2 比較,8 大于 2,交換,變為 [3, 5, 4, 2, 8]
。經過第一輪排序,最大的元素 8 已經被“冒泡”到了最后。接下來重復這個過程,直到整個數組有序。
代碼實現:
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n - i - 1):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]return arr
性能分析:
冒泡排序的時間復雜度為 O(n2),在所有排序算法中效率較低,但在數據量較小時,其簡單易實現的特點使其仍然具有一定的應用場景。
二、選擇排序:尋找最優選擇的算法
選擇排序的基本思想是:在每一趟排序中,從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然后再從剩余未排序元素中尋找最小(或最大)元素,然后放到已排序序列的末尾。以此類推,直到全部待排序的數據元素排完。
算法原理:
以數組 [64, 25, 12, 22, 11]
為例,在第一輪排序中,從頭到尾掃描整個數組,找到最小值 11,將其與第一個元素 64 交換位置,變