sort

const selectionSort = arr => {
    let len = arr.length, temp, min;
    for (let i = 0; i < len - 1; i++) {
        min = i;
        for (let j = i + 1; j < len; j++) {
            if (arr[j] < arr[i]) {
                min = j;
            }
        }
        if (i !== min) {
            temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }
    }
    return arr;
};
const bubbleSort = arr => {
    let temp;
    for (let i = arr.length - 1; i > 0; i--) {
        for (let j = 1; j <= i; j++) {
            if (arr[j - 1] > arr[j]) {
                temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
            }
        }
        console.log(arr);
    }
    return arr;
};
const insertSort = arr => {
    let temp;
    for (let i = 1; i < arr.length; i++) {
        for (let j = i; j >= 1; j--) {
            if (arr[j] < arr[j - 1]) {
                temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            } else {
                break;
            }
        }
        console.log(i, arr);
    }
    return arr;
};
const quickSort1 = arr => {
    if (arr.length <=1) return arr;
    const tempIndex = Math.floor(arr.length/2);
    const tempValue = arr.splice(tempIndex, 1)[0];
    const left = [];
    const right = [];
    arr.forEach(i => {
        if (i<= tempValue) {
            left.push(i);
        } else {
            right.push(i);
        }
    });
    return f(left).concat([tempValue], f(right));
}

const quickSort2 = (arr, left = 0, right = arr.length - 1) => {
    if (left >= right) return;
    let i = left
    let j = right
    const baseVal = arr[j];
    while (i < j) {
        while (i < j && arr[i] <= baseVal) {
            i++
        }
        arr[j] = arr[i];
        while (j > i && arr[j] >= baseVal) {
            j--
        }
        arr[i] = arr[j];
    }
    arr[j] = baseVal;
    sort(arr, left, j - 1);
    sort(arr, j + 1, right);
}
const shellSort = arr => {
    let k = Math.floor(arr.length/2);
    while(k > 0) {
        for (let i = k; i < arr.length; i++) {
            let num = i;
            while(num - k >=0 && arr[num]< arr[num - k]) {
                temp = arr[num];
                arr[num] = arr[num - k];
                arr[num - k] = temp;
                num = num - k;
            }
        }
        k = Math.floor(k/2);
    }
    return arr;
}

 

posted @ 2019-07-22 14:37  王利群  阅读(152)  评论(0编辑  收藏  举报