排序算法之选择排序(关键词:数据结构/算法/排序算法/选择排序)

版权声明:本文为博主原创文章,可以转载,但转载前请联系博主。 https://blog.csdn.net/qq_33528613/article/details/83859233

假定:有 1 个乱序的数列 nums ,其中有 n 个数。
要求:排好序之后是 从小到大 的顺序。

选择排序算法

代码

from swap import swap


def select_sort(nums):
	n = len(nums)
	i = 0

	while i <= n-2:

		minIndex = i
		j = i+1

		while j <= n-1:
			if nums[j] < nums[minIndex]:
				minIndex = j

			j += 1

		swap(nums, i, minIndex)

		i +=1


def select_sort_better(nums):
	n = len(nums)
	i = 0

	while i <= n-2:

		minIndex = i
		j = i+1

		while j <= n-1:
			if nums[j] < nums[minIndex]:
				minIndex = j

			j += 1

		if minIndex != i:
			swap(nums, minIndex, i)

		i += 1

我的理解

在这里插入图片描述

每 1 轮外循环中,
minIndex 的初始值总是 i ,
j 的初始值总是 i+1,即 nums[j] 的初始值总是 nums[i] 相邻的右边的 1 个值,

内循环中,
nums[j] 遍历从 i+1 到 n-1 的所有值,如果出现比 nums[minIndex] 小的值,
则用 minIndex 暂存较小值,
内循环结束,跳出内循环时,minIndex 存放从 i+1 到 n-1 的所有值中的最小值的下标。

内循环结束后,交换 nums(minIndex) 与 nums(i) 的值,即将 i+1 到 n-1 中的最小值放到 i 位置上,
造成的效果是,最小值总是从左到右排列。

指针 i 向右移动,进入下一轮外循环。

原理

算法复杂度

时间复杂度:
最坏情况下 ;
最好情况下 ;
平均情况 。

空间复杂度:

稳定性

参考文献

  1. 《数据结构 Python 语言描述》 - Lambert -
  2. 《数据结构(第 2 版)》 - 浙江大学 - ;
  3. 《数据结构与算法 Python 语言描述》 - 裘宗燕 - 北京大学 - 。

猜你喜欢

转载自blog.csdn.net/qq_33528613/article/details/83859233