排序算法之选择排序

选择排序算法


1. 常见排序算法的时间复杂度:

  • 时间复杂度为 O(N ^ 2) 的有:选择排序、冒泡排序、插入排序
  • 时间复杂度为 O(N * log N) 的有:归并排序、快速排序
  • 时间复杂度为O(N * log N)的算法比时间复杂度为 O(N ^ 2)的算法好的多
  • 时间复杂度就相当于数组的长度N与执行时间的关系
  • 时间复杂度的表示,按算最坏的情况看,而且忽略常数时间(执行时间确定的时间)
  • 算法的时间复杂度表示相同,它的区别是常数时间不同,但要排序的数组长度很长时,常数时间的影响可以忽略不计

2. 选择排序

选择排序是一种灵巧的算法,但其速度不是很快运行时间为O(n2)。快速排序是一种更快的排序算法,其运行时间为O(n * log n),这将在其它篇章介绍。

随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。既然如此,运行时间怎么还是O(n2)呢?

问得没错,并非每次都需要检查n个元素。第一次需要检查n个元素,但随后检查的元素数依次为n - 1, n – 2, …, 2和1。平均每次检查的元素数为1/2 × n,因此运行时间为O(n × 1/2 × n)。但这种关系的表示法省略诸如1/2这样的常数,因此简单地写作O(n × n)或O(n2)。

示例代码:

# 先编写一个用于找出数组中最小元素的函数。
def findSmallest(arr):
	smallest = arr[0] # 存储最小的值
	smallest_index = 0 # 存储最小元素的索引
	# 遍历数组中的每个每个元素,找出最小的
	for i in range(1, len(arr)):
		if arr[i] < smallest:
		smallest = arr[i]
		smallest_index = i
	return smallest_index

# 现在可以使用这个函数来编写选择排序算法了。
def selectionSort(arr):
	newArr = [] # 新的数组
	# 遍历数组中的每个元素,找出数组中最小的元素,并将其加入到新数组中
	for i in range(len(arr)):
		smallest = findSmallest(arr)
		newArr.append(arr.pop(smallest))
	return newArr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值