js排序算法

1.冒泡排序

O(n^2)
相邻的两个做比较,两个for循环,第一个for循环代表一共需要排几轮,第二个for循环代表每轮需要排几个数(因为每排一次就有一个数被确定)
下面是从小到大排序

function sort(arr: number[]) {
    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]) {
                let temp = arr[j + 1]
                arr[j + 1] = arr[j]
                arr[j] = temp
            }
        }
    }
    return arr
}
console.log(sort([6, 7, 8, 11,1, 67, 54, 5, 68]))

2.快速排序

0(nlogn)
选择一个数,比此数大的放在右边,比此数小的放左边。我选择的数是每次数组的第一个值。现在有两个指针,左和右,每次拿数组的第一个数save作为比较的值,首先是R指向的数与save比较,如果大于save就不移动,R就向左移动一个位置,如果小于save,就移动到L位置,将值赋值给L,然后L指针向右移动一位,再用L指针的数与save比较,save大于L指向的数,就把这个数放在右边即R指向的位置,如果save小于L指向的数,就不移动,指针L向右移动一位。当L=R代表移动完成,将save放在此时指向的位置。然后save左右两边的序列,再次进行以上的排序方法,直到左边或右边的数只有一个,就说明当前左边或右边是有序的。

function test(arr, L, R) {
    let a = L
    let b = R
    let save = arr[L]
    let flag = 1 //用来标识当前是比较比较L还是比较R
    while (L !== R) {
        if (flag === 1) {
            if (arr[R] < save) {
                arr[L] = arr[R]
                L++
                flag = 2
            }
            else {
                R--
            }
        } else {
            if (arr[L] > save) {
                arr[R] = arr[L]
                R--
                flag = 1
            } else {
                L++
            }
        }
    }
    arr[L] = save
    if (L - a > 1) {
        test(arr, a, L)
    }
    if (b - L > 1) {
        test(arr, L + 1, b)
    }
    return arr
}
let a = [6, 7, 8, 3, 111, 67, 54, 5, 68]
let len = a.length
console.log(test(a, 0, len - 1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值