程序员必须了解的十大排序算法之JS篇

写在前面:

查找和排序算法是算法(Algorithm)的入门知识,但它的经典思想能够运用到不少高级算法中;因此在公司面试时,面试官总会对此有所说起,若是连这种简单的算法都写不出来的话,相信面试官也不会对你抱有任何兴趣了,所以,对于这种初级排序算法咱们必定要作到信手拈来的程度;本文将依次简单介绍常见的十种排序算法,本人水平有限,仅供学习与交流面试

1、冒泡排序

基本思想: 经过与相邻元素值进行比较,而后依次交换位置,直到最大值交换至最后,造成升序,其过程就像水底冒出的气泡同样,由小变大,故称做冒泡排序算法

Tips:当数据为正序时,排序时间最少;反之则最多 api

动画演示 bash

实现代码

let arr=[5,4,3,2,1];
let L=arr.length;
function bubbleSort(arr){
    for(let i=0;i<L;i++){
        for(let j=0;j<L-i-1;j++){
            if(arr[j]>arr[j+1]){  //比较数据
                let temp = arr[j+1];    //数据交换
                arr[j+1]=arr[j];
                arr[j]=temp;
            }
        }
    }
    return arr;
}
let res =bubbleSort(arr);
console.log(res);
复制代码

时间复杂度O(n^2) , 空间复杂度O(1)学习

2、选择排序

基本思想: 首先在未排序的序列中找到小的,把它放在首位,而后继续寻找最小值,较小则放到已排序的序尾动画

动画演示 ui

实现代码

let arr = [5, 4, 3, 2, 1];
let minIndex, temp;
function selectionSort(arr) {
      for (let i = 0; i < arr.length - 1; i++) {
            minIndex = i;
            for (let j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {  //选择最小的数
                    minIndex = j;              //交换索引
                }
            }
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        return arr;
    }
let res = selectionSort(arr);
console.log(res);
复制代码

时间复杂度O(n^2) , 空间复杂度O(1)spa

虽然冒泡排序与选择排序的时间复杂度相同,但一般来讲,选择排序更快一些,由于选择排序的交换次数少于冒泡排序 3d

3、插入排序

**基本思想:**假定序列中第一个元素为最小值,而后第二项与其比较,小则插到前面,反以后面,剩下的元素再挨个同已排序的比较 动画演示code

实现代码

let arr = [5,4,3,2,1];
let current, preIndex;
function insertSort(){
    for(let i=0;i<arr.length;i++){
        current = arr[i];
        preIndex = i-1;
        while(preIndex>=0&&arr[preIndex]>current){
            arr[preIndex+1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex+1]= current;
    }
    return arr;
}
let res = insertSort(arr);
console.log(res);
复制代码

时间复杂度O(n^2),空间复杂度O(1)

持续更新中

相关文章
相关标签/搜索