21-02-28冒泡,快排,选择,

冒泡排序

 /*数组中有 n 个数,比较每相邻两个数,如果前者大于后者,就把两个数交换位置;这样一来,第一轮就可以选出一个最大的数放在最后面;那么经过 n-1(数组的 length - 1) 轮,就完成了所有数的排序。*/
    let arr = [3, 4, 1, 2, 9, 6, 6, 4, 9, 2, 122];

    function bubbleSort(arr) {
        //比较的轮数 n-1 轮  每一轮选出一个最大的数 放在最后面
            let done = true
        for (let i = 0; i < arr.length-1; i++) {
            //每一个数据比较多少次, n-已经比较的轮数 - 1
            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
                        done = false
                    }
            }
            if (done) {break;}
        }
        return arr
    }
    console.log(bubbleSort(arr));

快速排序

//选定一个值作为标量,把 比该值小的数放左边,比该值大的数放右边。分别对左右两边的数再次进行1中的操作一直递归,直到只剩下一个数为止。
let arr = [1, 2, 3, 54, 22, 1, 2, 3];
    function quick(arr) {
        if (arr.length <=1) {
           return  arr
        }
        let middle = Math.floor(arr.length / 2)
        let data = arr.splice(middle, 1)[0]
        let left = []
        let right = []
        for (let i = 0; i < arr.length; i++) {
            if (arr[i] <= data) left.push(arr[i])
            else right.push(arr[i])
        }
        return quick(left).concat([data],quick(right))
    }
    document.write(quick(arr));

选择排序

// 首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,知道排序完毕。
    //时间复杂度是 n^2 空间复杂度 是 1
    let example = [899, 94, 15, 88, 55, 76, 21, 39];
    function selectSort(arr) {
        let minIndex = 0;
        let temp = 0;
        console.time('选择排序耗时');
        //第一次循环 遍历整个数组 进行比较
        for (let i = 0; i < arr.length - 1; i++) {
            minIndex = i;
            /*第二次循环 找到的这项  对数组的后面所有项进行 对比 寻找到数组中最小的一项*/
            for (let j = i + 1; j < arr.length ; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            temp=arr[i];
            arr[i]=arr[minIndex];
            arr[minIndex]=temp;
        }
        console.timeEnd('选择排序耗时');
        return arr;
    }

    console.log(selectSort(example))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值