排序算法的JavaScript实现以及总结
一.冒泡排序
冒泡排序也成为沉淀排序(sinking sort),冒泡排序得名于其排序方式,它遍历整个数组,将数组的每一项与其后一项进行对比,如果不符合要求就交换位置,一共遍历n轮,n为数组的长度。n轮之后,数组得以完全排序。整个过程符合要求的数组项就像气泡从水底冒到水面一样泡到数组末端,所以叫做冒泡排序。
冒泡排序是最简单的排序方法,容易理解、实现简单,但是冒泡排序是效率最低的排序算法,由于算法嵌套了两轮循环(将数组遍历了n遍),所以时间复杂度为O(n^2)。最好的情况下,给出一个已经排序的数组进行冒泡排序,时间复杂度也为O(n)
function Bubble(arr) {
let len = arr.length;
for(let i=0;i<len;i++){ //已经排序好的个数
for(let j=0;j<len-1-i;j++){ //相邻的俩个数进行比较
if(a[j]>a[j+1]) {[a[j],a[j+1]]=[a[j+1],a[j]];}
}
}
return arr;
}
二.选择排序
找到数组中的最小(大)值,并将其放到第一位,然后找到第二小的值放到第二位……以此类推。
function Select(arr) {
let len = arr.length;
for (let i=0;i<len;i++){
let min = i;
for (let j=0;j<len;j++) {
if(arr[j] < arr[min]) {
min = j;
}
}
if(min !== i) {
[arr[min], arr[i]] = [arr[i], arr[min]];
}
}
return arr;
}
三.插入排序
插入排序是最接近生活的排序,因为我们打牌时就差不多是采用的这种排序方法。该方法从数组的第二项开始遍历数组的
n-1项(n为数组长度),遍历过程中对于当前项的左边数组项,依次从右到左进行对比,如果左边选项大于(或小于)当前项,则左边选项向右移动,然后继续对比前一项,直到找到不大于(不小于)自身的选项为止,对于所有大于当前项的选项,都在原来位置的基础上向右移动了一项。function insertion(arr) {
let len = arr.length;
for(let i=1; i<len; i++) {
let j = i;
let tmp = arr[i];
while(j>0 && arr[j-1] >tmp) {
arr[j] = arr[j-1];
j--;
}
arr[j] = tmp;
}
return arr;
}
//没咋看懂需要细细体会
作者:Russ_Zhong
链接:https://juejin.im/post/5b06ba5051882538953ac7e5
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
浙公网安备 33010602011771号