前言
经典的排序算法,很多人都听过,很多人也许用过,但是也有很多人,听过没见过。为什么呢?现在我们有了越来越多的框架、依赖包,我们将能用到排序的实际场景,作为业务将其封装成了函数,所以,一些人只知函数而不知其运行逻辑。
基于以上,为了让自己更好的理解函数运行逻辑,整理了一些基本排序的方法的运行规则,以及部分个人理解,希望能给大家一些帮助。
本文将讲述选择排序,及选择排序和冒泡排序的区别!
因为很多人仔细回想时,无法准确说明选择排序和冒泡排序的区别,甚至认为他们是同一个!
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。顾名思义,选择排序的核心要点在于选择,选择数组中的最大值或最小值!,然后按逻辑放到指定位置。
选择排序实现原理
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;
- 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾;
- 以此类推,直到所有元素均排序完毕;
代码
function selectionSort(array) {
//外循环控制次数
for (var i = 0; i < array.length; i++) {
//假定最小值用于比较
var min = array[i];
//j=i+1使其从剩余元素中进行筛查
for (var j = i + 1; j <= array.length; j++) {
//从剩余数字中寻找最小值
if (min > array[j]) {
//更新最小值
min = array[j];
//交换a[j]和a[i]
var item = array[j];
array[j] = array[i];
array[i] = item;
}
}
}
console.log("selectionSort result:", array);
}
selectionSort([4, 5, 1, 3, 2]);
输出值:
复杂度
选择排序的时间复杂度,
时间复杂度:O(n^2);
空间复杂度:O(n);
选择排序和冒泡排序比较
区别:
- 冒泡排序:两两比较,即时交换。
- 选择法排序:先找最值,一次交换。
优劣:
- 选择排序比冒泡排序速率快。 选择排序元素交换次数为O(n),冒泡排序元素交换次数为O(n^2),由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,所以选择排序比冒泡排序快;
- 冒泡排序比选择排序实现简单。 如果待排序数据量小,并且对效率要求不高时,冒泡排序完全可以满足;
寄语
看似选择排序和冒泡排序实现逻辑相同,且均能实现排序功能,但是实则在运算速率上不可同日而语,这就是基础算法的魅力。
圆越大,不可预知的可能越多!