js实现冒泡排序,二分法排序,插入排序,选择排序

冒泡排序

a)比较两个相邻的元素,如果后一个比前一个大,则交换位置

b) 每次比较结果是把最大的依次放后面

function sort(element){
    for(var i = 0;i<element.length-1;i++) {
        for(var j = 0; j < element.length-i-1; j++){
            if(element[j] > element[j+1]){
                var swap = element[j]
                element[j] = element[j+1]
                element[j+1] = swap
            }
        }
        console.log(element)
    }
}
var element = [9,5,1,2,7,8,4,6,3];
console.log(sort(element))//[1, 2, 3, 4, 5, 6, 7, 8, 9]

二分法排序

a)获取中间元素,以中间元素把原数组切割成左右两个数组

b)余下元素和该元素对比,大于的放右边,小于的放左边

c)递归迭代

function twoSort(arr){
    if(arr.length<=1){
        return arr;
    }
    var middle = arr.splice(Math.floor(arr.length/2),1)
    console.log(middle)
    var leftArr = []
    var rightArr = []
    for(var i=0; i<arr.length; i++){
       if(parseInt(arr[i])<=middle){
           leftArr.push(arr[i])      //把比中间值小的放一个数组
       }else{
           rightArr.push(arr[i])     //把比中间值大的放另一个数组
       }
    }
    return twoSort(leftArr).concat(middle,twoSort(rightArr))
}
var arr = [9,5,1,2,7,8,4,6,3];
var newArr = twoSort(arr);
console.log(newArr, 0)

插入排序

a)依次找出比前一项大的所有数

b)让它们依次和之前已经排序好的数列进行比较

function insertSort(arr) {
    var len = arr.length
    for(var i=1; i<len; i++) {
        for(var j=i; j<len && arr[j-1]>arr[j]; j--) {
            var temp = arr[j]
            arr[j] = arr[j-1]
            arr[j-1] = temp
        }
    }
    return arr
}
console.log(insertSort([1,3,2,6,8,9,45,3,4]))

选择排序

a)假定第一个数为最小值,让余下的第一个作比较,如果比第一个更小,交换位置

b)再假定第二个为最小值,依次迭代

function selectSort(arr) {
    var len = arr.length;
    var minIndex, temp;
    for(var i=0; i<len; i++) {
        //先给一个索引号,假设i为最小的数
        minIndex = i;
        //循环遍历,如果i之后有比索引i更小的数,则将索引变为j
        for(var j=i; j<len; j++) {
            if(arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        //将i索引的数和j索引的数互换
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}
console.log(selectSort([132,545,56,79,90,4,56,7,32]))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值