内容简介:选择排序是个简单的排序,思路主要通过多次遍历待排序的集合,每次弹出最大/小值并放入新的集合,直到原始集合为空。举个例子:假设要对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]按照升序的方式进行排序,步骤与结果如下
- 从A中找出最大值,将其pop,并放入B中,执行后的结果如下:
A=[2,5,9,3] B=[1]
- 重复执行第一部
A=[5,9,3] B=[1,2]
- 重复执行第一部
A=[5,9] B=[1,2,3]
- 重复执行第一部
A=[9] B=[1,2,3,5]
- 重复执行第一部
A=[] B=[1,2,3,5,9]
- 此时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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 排序算法之冒泡排序改进算法
- 快速排序算法,C语言快速排序算法深入剖析
- 排序算法下——桶排序、计数排序和基数排序
- 数据结构和算法面试题系列—排序算法之快速排序
- 数据结构和算法面试题系列—排序算法之基础排序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。