冒泡排序,选择排序,插入排序,快速排序

1.冒泡排序 Bubble Sort

原理: 冒泡排序在每次冒泡操作时会比较相邻的两个元素,看是否满足大小关系要求,不满足就将它俩互换。一直迭代到不再需要交换,也就是排序完成。

function BubbleSort(arr) {
    let temp
    for(let i = 0 ; i < arr.length - 1 ; i++) {
        for(let j = 0 ; j < arr.length - 1 - i; j++) {
            if(arr[j] > arr[j+1]) {
                temp = arr[j]
                arr[j] = arr[j+1]
                arr[j+1] = temp
            }
        }
    }
    return arr
}

2.选择排序

原理:将最小的元素存放在数组起始位置,再从剩下的未排序的序列中寻找最小的元素,然后将其放到已排序的序列后面。以此类推,直到排序完成。

function selectSort(arr) {
    let minIndex, temp
    for (let i = 0; i < arr.length; 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
    }
    return arr
}

3.插入排序

原理:插入排序顾名思义,对于未排序的数据,在已排序的序列中从后往前扫描,找到相应的位置进行插入,保持已排序序列中元素一直有序。
从 i 等于 1 开始遍历,拿到当前元素 cur,与前面的元素进行比较。
如果前面的元素大于当前元素,就把前面的元素和当前元素进行交换,不断循环直到未排序序列中元素为空,排序完成。

var arr = [1, 12, 6, 3, 5];
function insertSort(arr) {
    let cur, prev
    for (let i = 1; i < arr.length; i++) {
        cur = arr[i]
        prev = i - 1
        while (prev >= 0 && arr[prev] > cur) {
            arr[prev + 1] = arr[prev]
            prev--
        }
        arr[prev + 1] = cur
    }
    return arr
}

4.快速排序

原理: 快速排序通过遍历数组,将待排序元素分隔成独立的两部分,一部分记录的元素均比另一部分的元素小,则可以分别对这两部分记录的元素继续进行排序,直到排序完成。

function quickSort(arr) {
    if (arr.length <= 1) return arr
    let middleIndex = Math.floor(arr.length / 2)
    let middleValue = arr.splice(middleIndex, 1)[0]
    let arrayLeft = [],
        arrayRight = []
    for (let i = 0; i < arr.length; i++) {
        let item = arr[i]
        item < middleValue ? arrayLeft.push(item) : arrayRight.push(item)
    }
    return quickSort(arrayLeft).concat(middleValue, quickSort(arrayRight))
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值