算法快学笔记(三):选择排序的原理与实现

栏目: 编程工具 · 发布时间: 7年前

内容简介:选择排序是个简单的排序,思路主要通过多次遍历待排序的集合,每次弹出最大/小值并放入新的集合,直到原始集合为空。举个例子:假设要对A=[1,2,5,9,3]按照升序的方式进行排序,步骤与结果如下从上面的过程可以看出,要对A进行排序,必须要执行N轮操作,每一轮操作必须检查列表中的每个元素。随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。平均每次检查的元素数为1/2 × n, 因此运行时间为O(n × 1/2 × n),但大O表示法省略诸如1/2这样的常数,因此简单地写作O(n

1. 原理介绍

选择 排序 是个简单的排序,思路主要通过多次遍历待排序的集合,每次弹出最大/小值并放入新的集合,直到原始集合为空。举个例子:

假设要对A=[1,2,5,9,3]按照升序的方式进行排序,步骤与结果如下

  1. 从A中找出最大值,将其pop,并放入B中,执行后的结果如下:
A=[2,5,9,3]
B=[1]
  1. 重复执行第一部
A=[5,9,3]
B=[1,2]
  1. 重复执行第一部
A=[5,9]
B=[1,2,3]
  1. 重复执行第一部
A=[9]
B=[1,2,3,5]
  1. 重复执行第一部
A=[]
B=[1,2,3,5,9]
  1. 此时A为空,返回B

2. 运行时间分析

从上面的过程可以看出,要对A进行排序,必须要执行N轮操作,每一轮操作必须检查列表中的每个元素。随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。平均每次检查的元素数为1/2 × n, 因此运行时间为O(n × 1/2 × n),但大O表示法省略诸如1/2这样的常数,因此简单地写作O(n × n)或O(n^2)。

3. 代码实现

Go语言实现的过程如下:

// 对int数组的选择排序
func SelectSort(items []int) []int {
	result := make([]int,len(items))
	for i:=0;i< len(result);i++{
		tmpIndex := getMinItemIndex(&items)
		result[i]=items[tmpIndex]
		//从原始数组中删除掉被选择的元素
		items = append(items[:tmpIndex], items[tmpIndex+1:]...)
	}
	return result
}

//获取一个数组中,最小元素的位置
func getMinItemIndex(ints *[]int) int {
	//默认假设第一个元素作为临时最小值
	min := (*ints)[0]
	smallestIndex :=0
	for index,item := range *ints {
		if item < min {
			min = item
			smallestIndex =index
		}
	}
	return smallestIndex
}

4. 总结

  • 选择排序的时间复杂度为:O(n^2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Fluent Python

Fluent Python

Luciano Ramalho / O'Reilly Media / 2015-8-20 / USD 39.99

Learn how to write idiomatic, effective Python code by leveraging its best features. Python's simplicity quickly lets you become productive with it, but this often means you aren’t using everything th......一起来看看 《Fluent Python》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码