自从算法课结课后就不多系统地学习、总结算法相关的知识了,因此但愿以文章记录算法,进行总结。所记录的算法均学习自《算法(第4版)》,此书代码采用Java编写,本人使用js复现。算法
选择排序的思想很是简单:数组
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(若是第一个元素就是最小元素那么它就和本身交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫作选择排序,由于它在不断地选择剩余元素之中的最小者。
——《算法(第四版)》less
此算法的实现很是简单,如下为排序的核心代码学习
sort(array) {
for (let i = 0; i < array.length; i++) {
//遍历元素下标
let minIndex = i;
let j = i + 1;
for (; j < array.length; j++) {
//寻找最小值
if (this.less(array[j], array[minIndex])) {
minIndex = j;
}
}
this.exch(array, i, minIndex);
}
}
复制代码
所有代码于CodePen之中:
CodePen打开this
选择排序很是简单,咱们也能够发现有两个特色:spa
为了找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么信息 ——《算法(第四版)》code
不管数据的初始状态如何,选择排序都会将全部元素进行遍历。所以,不管输入数据是排序好的数组仍是随机数组,其运行时间都是相同的。此算法不善于利用输入的初始状态cdn
每次交换都会改变两个数组元素的值,所以选择排序用了N次交换——交换次数和数组大小是线性关系。 ——《算法(第四版)》blog
选择排序很是简单。没撒好说。🤖排序
《算法(第四版)》