首先回顾下排序算法的种类:

这一篇文章就准备聊聊 选择排序,废话不多说,开搞!

ppx2.jpg

选择排序的简述

选择排序是性能相对较差的算法,因为它的平均时间复杂度为 **O(n^2)**,同时它也 不是一个稳定的 算法,但是它也不是一无是处,至少它的空间复杂度为 O(1)

通常不建议在实际开发中使用,但与冒泡排序一样,可以作为算法入门进行学习

算法的稳定性指的是如果在某一无序集合中a=b,且a在b前面,经过排序后,如果a依旧在b前面,那么可以认为使用的排序算法是稳定的,反之,就是不稳定的

选择排序的实现过程

选择排序是一种简单直观的排序算法,它的工作原理:以升序为例,首先在未排序序列中找到 最小元素,存放到排序序列的 起始位置,然后,再从剩余 未排序 元素中继续寻找 最小元素,然后放到已排序序列的 末尾,以此类推,直到所有元素均排序完毕

666.jpg

下面给出代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function chooseSort(arr){
let len = arr.length
for(let i = 0;i<len-1;i++){
let min = i
for(let j = i+1;j<len;j++){
if(arr[j] < arr[min]){
min = j
}
}
if(min !== i) {
[arr[min],arr[i]] = [arr[i],arr[min]]
}
}
return arr
}

从代码示例中我们可以总结如下关键点

  1. 确定外循环轮数,轮数为 集合总长度-1
  2. 确定内循环轮数,轮数为 集合总长度 - 已排序集合长度 - 1
  3. 在每一轮内循环内,假定未排序序列的 第一个元素 为最小值,然后遍历未排序序列,找到 真正的 最小值
  4. 重复上述步骤,直至整个集合有序

结语

选择排序其实理解起来很容易,实现上也很简单,因此对于算法的入门十分适合。算法的学习过程虽然枯燥,但是真正掌握后就可以实实在在提升我们的内功,所以,一起加油吧,骚年!