当前位置: 欣欣网 > 码农

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)











    相关文章: