排序---JS

简单选择排序

function selectSort(nums) {
        for (let i = 0; i < nums.length - 1; i++){
            let index = i
            for (let j = i + 1; j < nums.length; j++) {
                if (nums[j] < nums[index]) {
                    index = j
                }
            }
            if (index !== i) {
                let tmp = nums[i]
                nums[i] = nums[index]
                nums[index] = tmp
            }
        }
    }

插入排序

function insertSort(nums) {
        for(let i = 0; i < nums.length - 1; i++) {
            let index = i + 1
            while(index > 0 && nums[index] < nums[index-1]){
                let tmp = nums[index]
                nums[index] = nums[index-1]
                nums[index-1] = tmp
                index--
            }
        }
    }

冒泡排序

function bubbleSort (nums) {
    for (let i = 0; i < nums.length; i++) {
        for (let j = 0; j < nums.length - i - 1; j++) {
            if (nums[j] > nums[j+1]) {
                let tmp = nums[j]
                nums[j] = nums[j+1]
                nums[j+1] = tmp
            }
        }
    }
}

归并排序

function mergeSort (nums, low, high) {
    if (low < high) {
        let mid = Math.floor((low + high)/2)
        mergeSort(nums, low, mid)
        mergeSort(nums, mid+1, high)
        merge(nums, low, mid, high)
    }
}
function merge(nums, low, mid, high) {
    let tmp = new Array(high-low+1)
    let i = low, j = mid+1
    let index = 0
    while( i <= mid && j <= high){
        if(nums[i] < nums[j]) {
            tmp[index++] = nums[i++]
        } else {
            tmp[index++] = nums[j++]
        }
    }
    for(;i <= mid;) {
        tmp[index++] = nums[i++]
    }
    for(;j <= high;) {
        tmp[index++] = nums[j++]
    }
    for(let k = 0; k < tmp.length; k++) {
        nums[low + k] = tmp [k]
    }
}

快排

function quickSort (nums, low, high) {
    if (low >= high) return
    let tmp = nums[low],i = low,j = high
    while(i < j) {
        while(i < j && nums[j] >= tmp) {
            j--
        }
        if (i < j) {
            nums[i++] = nums[j]
        }
        while(i < j && nums[i] < tmp) {
            i++
        }
        if (i < j) {
            nums[j--] = nums[i]
        }
    }
    nums[i] = tmp
    quickSort(nums,low,i-1)
    quickSort(nums,i+1,high)
}

测试代码

(
    function () {
        let nums1 = [34,66,67,324,87,34,76,23,45,66,567,23,4,87]
        let nums2 = [34,66,67,324,87,34,76,23,45,66,567,23,4,87]
        selectSort(nums1)
        // insertSort(nums2)
        bubbleSort(nums2)
        // mergeSort(nums2)
        // quickSort(nums2)
        document.write(judgeEqual(nums1, nums2))
    }
)()
function judgeEqual (nums1, nums2) {
    if (nums1.length !== nums2.length) {
        return false
    }
    for (let i = 0; i < nums1.length; i++) {
        if (nums1[i] !== nums2[i]) {
            return false
        }
    }
    return true
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值