程序員必須瞭解的十大排序算法之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)

持續更新中

相關文章
相關標籤/搜索