三种基本排序

本文介绍了三种基本的排序算法:冒泡排序、快速排序和插入排序。冒泡排序通过不断交换相邻的逆序元素实现排序;快速排序采用分治策略,通过选取中间值作为基准进行划分;插入排序则是将每个元素插入到已排序部分的正确位置。这些排序算法在不同场景下有不同的效率表现,理解它们的原理对于优化算法和提高编程能力至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

function bubbleSort(arr) {
            var len = arr.length
            for (var i = 0; i < len - 1; i++) {
                for (var j = 0; j < len - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j + 1]
                        arr[j + 1] = arr[j]
                        arr[j] = temp
                    }
                }
            }
            return arr
        }
        var data = bubbleSort([8, 5, 6, 4, 9, 7, 1, 10])
        console.log(data) //[1,4,5,6,7,8,9,10]

快速排序

function quick(ary) {
            // 结束递归
            if (ary.length <= 1) {
                return ary
            }
            let middleIndex = Math.floor(ary.length / 2)
            let middleValue = ary.splice(middleIndex, 1)[0]
            let aryLeft = [],
                aryRight = []
            for (let i = 0; i < ary.length; i++) {
                let item = ary[i]
                item < middleValue ? aryLeft.push(item) : aryRight.push(item)
            }
            return quick(aryLeft).concat(middleValue, quick(aryRight))
        }
        let ary = [12, 8, 15, 16, 1, 24]
        ary = quick(ary)
        console.log(ary) // [1, 8, 12, 15, 16, 24]

插入排序

function insert(ary) {
            // 定义新数组
            let handle = []
            handle.push(ary[0])
            for (let i = 1; i < ary.length; i++) {
                // 获取每个元素
                let A = ary[i]
                    // 与新数组依次比较
                for (let j = handle.length - 1; j >= 0; j--) {
                    // 每次要比较的元素
                    let B = handle[j]
                        // 如果A比B大,就把A放到B的后面
                    if (A > B) {
                        handle.splice(j + 1, 0, A)
                        break
                    }
                    // 已经比到第一项,就把元素放到最前面
                    if (j === 0) {
                        handle.unshift(A)
                    }
                }
            }
            return handle
        }
        let ary = insert([12, 8, 24, 16, 1])
        console.log(ary) //[1, 8, 12, 16, 24]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值