1. 程式人生 > >常用排序演算法:直接選擇排序

常用排序演算法:直接選擇排序

直接選擇排序演算法思路:

第 1 趟,在待排序記錄 r1 ~ r[n]中選出最小的記錄,將它與 r1 交換;第 2 趟, 在待排序記錄 r2 ~ r[n]中選出最小的記錄,將它與 r2 交換;以此類推,第 i 趟在待排序 記錄 r[i] ~ r[n]中選出最小的記錄,將它與 r[i]交換,使有序序列不斷增長直到全部排序 完畢。

例如[2, 4, 3, 1, 0],第一趟找到最小值為0,將0和第一位交換,得到[0, 4, 3, 1, 2],第二趟從[4, 3, 1, 2]中找到最小值1,再和第一位交換得到[0, 1, 3, 4, 2],以此類推知道排序完成。

程式碼實現:

def select_sort(nums):
    for i in range(len(nums)):  # 第i趟開始時 無序區為:[i:]
        min_pos = i  # 最小值位置
        for j in range(i + 1, len(nums)):  # 在無序區裡面找最小值,並記錄位置
            if nums[j] < nums[min_pos]:
                min_pos = j
        nums[min_pos], nums[i] = nums[i], nums[min_pos]  # 交換
        print(nums)


select_sort([2, 4, 3, 1, 0])

# [0, 4, 3, 1, 2]
# [0, 1, 3, 4, 2]
# [0, 1, 2, 4, 3]
# [0, 1, 2, 3, 4]
# [0, 1, 2, 3, 4]