采用选择排序方式对数组进行排序
选择排序百科:选择排序(Selection sort)是一种简单直观的排序算法。
摘一个示例做个说明.
示例 1:
输入: [0,5,9,3,12,7]
输出: [0,3,5,7,9,12]
算法原理:
- 第一次从待排序的数据中选出最小或者最大的一个元素,放在数组的起始位置.然后再从剩下待排序数据中继续寻找相应数据,放到已排序的末尾.直到结束.
- 算法演示 选择排序演示.gif
算法分析:
- 时间复杂度
选择排序的交换操作介于 0 和 (n - 1)次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。 - 算法稳定性
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了。
综上,选择排序是一种不稳定排序算法.
代码实现-Swift版本:
func selectionSort(nums: inout [Int]){
var minIndex: Int// 先找最小的进行交换排序
for i in 0 ..< nums.count - 1 {
minIndex = i
for j in i + 1 ..< nums.count{
// 循环遍历未排序的数据,找出最小值
if nums[minIndex] > nums[j] {
minIndex = j
}
}
nums.swapAt(i, minIndex)//交换最小值和当前值
}
}
测试用例:
var nums = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
参考:
考察要点:
- 数组
- 排序
网友评论