排序算法

87 阅读1分钟

快速排序

let quickSort = function(arr) {
    if (arr.length <= 1) return arr;
    _quickSort(arr, 0, arr.length - 1);
    return arr;
}
let _quickSort = function(arr, start, end) {
        if (start >= end) return;
        let left = start;
        let right = end;
        let flag = Math.floor((start + end) / 2);
        let pivot = arr[flag];
        while (left < right) {
            if (left < flag && arr[left] <= pivot) {
                left++;
            }
            if (right > flag && arr[right] >= pivot) {
                right--;
            }
            if (left == right) {
                continue;
            }
            let temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            if (left == flag) {
                flag = right;
            } else if (right == flag) {
                flag = left;
            }
        }
        _quickSort(arr, start, flag - 1);
        _quickSort(arr, flag + 1, end);
    }

插入排序

let insertSort = function(arr) {
    if (arr.length <= 1) return arr;
    for (let i = 1; i < arr.length; i++) {
        let flag = i;
        let temp = arr[i];
        while (flag > 0 && temp < arr[flag - 1]) {
            arr[flag] = arr[flag - 1];
            flag--;
        }
        arr[flag] = temp;
    }
    return arr;
}

归并排序

let mergeSort = function(arr) {
    if (arr.length <= 1) return arr;
    let flag = Math.floor((0 + arr.length) / 2);
    let leftArr = arr.slice(0, flag);
    let rightArr = arr.slice(flag);
    return _merge(mergeSort(leftArr), mergeSort(rightArr));
}
let _merge = function(leftArr, rightArr) {
    let left = leftArr.length;
    let right = rightArr.length;
    let i = 0;
    let j = 0;
    let arr = [];
    while (i < left && j < right) {
        if (leftArr[i] < rightArr[j]) {
            arr.push(leftArr[i++]);
        } else {
            arr.push(rightArr[j++]);
        }
    }
    while (i < left) {
        arr.push(leftArr[i++]);
    }
    while (j < right) {
        arr.push(rightArr[j++]);
    }
    return arr;
}

冒泡排序

let bubbleSort = function(arr) {
    if (arr.length <= 1) return arr;
    for (let i = 0; i < arr.length - 1; i++) {
        for (let j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {
                let temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    return arr;
}