首页 > 技术文章 > js各种排序算法总结

chenlq 2020-09-23 16:46 原文

var arr = [2, 3, 4, 1, 6, 5];


//快速排序
function quickSort(arr, left = 0, right = arr.length - 1) {

if (left >= right) {
    return;
}
var i = left;
var j = right;
var baseNum = arr[j];
while (i < j) {
    while (i < j && arr[i] < baseNum) {
        i++;
    }
    arr[j] = arr[i];

    while (j > i && arr[j] >= baseNum) {
        j--;
    }
    arr[i] = arr[j];
}
arr[j] = baseNum;
quickSort(arr, left, j - 1);
quickSort(arr, j + 1, right);


return arr;
}

// 插入排序
function insertSort(array) {

for (let i = 1; i < array.length; i++) {

    let target = i;

    for (let j = i - 1; j >= 0; j--) {

        if (array[target] < array[j]) {

            [array[target], array[j]] = [array[j], array[target]]
            target = j;
        } else {
            break;
        }
    }

}
return array;
}

//归并排序
function mergeSort(array, left = 0, right = array.length - 1) {
if (left < right) {
    let mid = Math.floor((left + right) / 2);
    mergeSort(array, left, mid);
    mergeSort(array, mid + 1, right);
    merge(array, left, right);
}
return array;
}

function merge(array, left, right) {

let temp = [];

let mid = Math.floor((left + right) / 2);

let leftIndex = left;
let rightIndex = mid + 1;
let tempIndex = 0;
while (leftIndex <= mid && rightIndex <= right) {
    if (array[leftIndex] < array[rightIndex]) {
        temp[tempIndex++] = array[leftIndex++]
    } else {
        temp[tempIndex++] = array[rightIndex++]
    }
}
while (leftIndex <= mid) {
    temp[tempIndex++] = array[leftIndex++]
}
while (rightIndex <= right) {
    temp[tempIndex++] = array[rightIndex++]
}

tempIndex = 0;
for (let i = left; i <= right; i++) {
    array[i] = temp[tempIndex++]
}

}

//冒泡
function bubbleSort(array) {
for (let i = 0; i < array.length; i++) {
    let flag = true;
    for (let j = 0; j < array.length - 1 - i; j++) {
        if (array[j] > array[j + 1]) {
            [array[j + 1], array[j]] = [array[j], array[j + 1]]
            flag = false;
        }
    }
    if (flag) {
        break;
    }
    console.log("array", array)
}
return array;
}

//选择排序
function selectionSort(array) {

for (let i = 0; i < array.length; i++) {
    let minIndex = i;
    for (let j = i + 1; j < array.length; j++) {
        if (array[j] < array[minIndex]) {
            minIndex = j;
        }
    }
    [array[minIndex], array[i]] = [array[i], array[minIndex]]
}
return array;
}

console.log(quickSort(arr))

推荐阅读