來來來,看JS排序算法

各算法時間複雜度

先粗知一下各個算法及其複雜度 ,咱們這裏所說的排序算法就是數據結構裏邊的,學過數據結構的確定知道他們的原理。咱們不細說原理,直接講述下代碼.用的時候直接用sort便可 算法

時間複雜度和空間複雜度計算方式不用我說了吧

冒泡排序

這個比較簡單,相鄰兩個數據比較,就是至關於大水泡在一層層上升,因此是冒泡排序數組

export default (arrays) => {
     for (let i = 0; i < arrays.length - 1 ; i++) {
            //內層循環是當前趟數須要比較的次數
            for (let j = 0; j < arrays.length - i - 1; j++) {
                //前一位與後一位與前一位比較,若是前一位比後一位要大,那麼交換
                if (arrays[j] > arrays[j + 1]) {
                    temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;
                }
            }
        }
    }
複製代碼

選擇排序

選擇排序也是兩層for循環,就是至關於遍歷數組全部元素,取出當前遍歷元素的最小值給遍歷初始元素,與冒泡排序不一樣的是,選擇排序是遍歷獲取最小值而後排序,冒泡是在不斷的置換相鄰元素順序。bash

export default (arrays) => {
     for (let i = 0; i < arrays.length; i++) {
            let min = arr[i];
            //內層循環是當前趟數須要比較的次數
            for (let j = i+1; j < arrays.length; j++) {
                //前一位與後一位與前一位比較,若是前一位比後一位要大,那麼交換
                if (arrays[j] < min) {
                    let temp = min;
                    min = arrays[j];
                    arrays[j] = temp;
                }
            }
            arr[i]=min;
        }
    return arrays;
    } 
複製代碼

排序延伸

問題:最大間距,即求排序數組相鄰元素之間最大的差值。
常規作法思路: 首先經過sort排序,而後遍歷求差值,比較便可,這種性能不是最優解,由於重複遍歷!
個人算法思路: 在經過冒泡排序和選擇排序的每一次遍歷時,能夠得到一個相鄰元素之間的差值,便可以在排序過程當中進行差值比較,減小一次遍歷過程。
代碼數據結構

export default (arrays) => {
     if(arrays.length<2){
        return 0;
     }
     for (let i = 0; i < arrays.length - 1 ; i++) {
         //內層循環是當前趟數須要比較的次數
         for (let j = 0; j < arrays.length - i - 1; j++) {
            //前一位與後一位與前一位比較,若是前一位比後一位要大,那麼交換
            if (arrays[j] > arrays[j + 1]) {
                temp = arrays[j];
                arrays[j] = arrays[j + 1];
                arrays[j + 1] = temp;
            }
        }
        let temp =math.abs(arrays[length-2-i]-arrays[length-1-i];
        if(temp>max){
            max = temp;
        }
     }
    return max;
    }
複製代碼
相關文章
相關標籤/搜索