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

假定:有 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 语言描述》 - 裘宗燕 - 北京大学 - 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值