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;
}

 

转载于:https://www.cnblogs.com/liqunblog/p/11225716.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值