當前位置: 妍妍網 > 碼農

python選擇排序演算法

2024-03-09碼農

Python,學霸

  • 閱讀指南

  • 原理

  • 例項

  • 輸出

  • gif演示制作

  • 原理

    選擇排序是一種簡單直觀的排序演算法。其原理是透過遍歷待排序的元素,每次選出最小(或最大)的元素,並將其放置在已排序序列的末尾。具體步驟如下:

  • 首先,從待排序序列中找到最小(或最大)的元素,並將其與序列的第一個元素交換位置。

  • 然後,在剩余的未排序序列中,繼續尋找最小(或最大)的元素,將其與序列的第二個元素交換位置。

  • 以此類推,重復執行上述操作,直到所有元素都被排序。

  • 例項

    from typing import List
    def selection_sort(arr: List[int]) -> List[int]:
    n = len(arr)
    for i in range(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
    #選擇排序演算法
    arr = [9, 1, 7, 2, 5]
    sorted_arr = selection_sort(arr)
    print(sorted_arr) #輸出排序後的陣列

    輸出

    [1, 2, 5, 7, 9]


    生成gif演示圖:

    from PIL import Image, ImageDraw
    import random
    def generate_image(arr, moving_index, swap_index):
    #圖片的基本參數
    image_width = 800
    image_height = 600
    bar_width = 40
    bar_padding = 10
    x_offset = 50
    #建立一個空白圖片
    image = Image.new('RGB', (image_width, image_height), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    #繪制柱狀圖
    for i in range(len(arr)):
    bar_height = arr[i] * (image_height - 100) // max(arr)
    x0 = x_offset + i * (bar_width + bar_padding)
    y0 = image_height - bar_height
    x1 = x0 + bar_width
    y1 = image_height
    color = (255, 140, 0) # 未排序好的方塊顏色
    if i in moving_index:
    color = (0, 255, 0) # 正在移動的方塊顏色
    elif i in swap_index:
    color = (220, 20, 60) # 正在交換的方塊顏色
    draw.rectangle([x0, y0, x1, y1], fill=color)
    return image
    def selection_sort_animation(arr):
    frames = []
    n = len(arr)
    for i in range(n):
    min_index = i
    for j in range(i + 1, n):
    if arr[j] < arr[min_index]:
    min_index = j
    #生成移動過程幀
    moving_index = [min_index]
    frame = generate_image(arr, moving_index, [])
    frames.append(frame)
    #生成交換過程幀
    swap_index = [i, min_index]
    frame = generate_image(arr, [], swap_index)
    frames.append(frame)
    #交換元素
    arr[i], arr[min_index] = arr[min_index], arr[i]
    #生成當前最小值到正確位置的幀
    frame = generate_image(arr, [], [])
    frames.append(frame)
    return frames
    #選擇排序演算法
    arr = [9, 1, 7, 2, 5] # 待排序數據
    frames = selection_sort_animation(arr)
    #保存為GIF
    frames[0].save('sorting.gif', format='GIF',
    append_images=frames[1:],
    save_all=True,
    duration=900,
    loop=0)











    相關文章: