一、选择排序
选择排序是一种简单的排序算法,其基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
选择排序算法的运作如下:
1、从原始数组的开始位置,寻找最小的元素。
2、将找到的最小元素与数组的第一个元素交换位置。
3、接着,在剩余未排序的元素中继续寻找最小的元素。
4、重复步骤2和步骤3,直到所有元素均排序完毕。
5、经过n-1次迭代后(其中n是数组的长度),数组将被排序完成。
时间复杂度:最坏情况O(N^2),最坏的情况发生在数组完全逆序时,此时选择排序的行为与平均情况类似,需要进行 N*(N-1)/2 次比较
空间复杂度: O(1),选择排序是原地排序算法,只需要一个的内存空间来存储当前找到的最小值
# -*- coding: utf-8 -*-
"""
======================================
File Name :selection_sort.py
Author :lanmingyong
date :2024/4/18 10:49
Description:选择排序是一种简单的排序算法,其基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
时间复杂度:最坏情况O(N^2),最坏的情况发生在数组完全逆序时,此时选择排序的行为与平均情况类似,需要进行 N*(N-1)/2 次比较
空间复杂度: O(1),选择排序是原地排序算法,因为它只需要一个额外的内存空间来存储当前找到的最小值
=======================================
"""
def selection(arr):
for i in range(len(arr) - 1):
mix_num = i
for j in range(i + 1, len(arr)):
if arr[mix_num] > arr[j]:
mix_num = j
arr[i], arr[mix_num] = arr[mix_num], arr[i]
print(arr)
arr = [9, 6, 7, 2, 8, 1, 0, 4]
selection(arr)
# 执行输出
[0, 6, 7, 2, 8, 1, 9, 4]
[0, 1, 7, 2, 8, 6, 9, 4]
[0, 1, 2, 7, 8, 6, 9, 4]
[0, 1, 2, 4, 8, 6, 9, 7]
[0, 1, 2, 4, 6, 8, 9, 7]
[0, 1, 2, 4, 6, 7, 9, 8]
[0, 1, 2, 4, 6, 7, 8, 9]
二、动画演示