javascript三种排序方法

冒泡排序:

    var arr = [ 9,8,11,6,5,2,1]
分析:
第一轮:
8 9 11 6 5 2 1
8 9 11 6 5 2 1
8 9 6 11 5 2 1
8 9 6 5 11 2 1
8 9 6 5 2 11 1
8 9 6 5 2 1 11

第二轮
8 9 6 5 2 1
8 6 9 5 2 1
8 6 5 9 2 1
8 6 5 2 9 1
8 6 5 2 1 9


第三轮
8 6 5 2 1

6 8 5 2 1
6 5 8 2 1
6 5 2 8 1
6 5 2 1 8


第四轮
6 5 2 1
5 6 2 1
5 2 6 1
5 2 1 6
 
第五轮
5 2 1
2 5 1
2 1 5

第六轮
2 1
1 2
// function bubbleSort(arr){
        //     //确定循环的次数
        //     for(var i = 0 ; i < arr.length - 1 ; i++){
        //         //每一轮 数值比较
        //         for(var k = 0 ; k < arr.length - i - 1; k++){
        //             //谁大谁往后排
        //             if(arr[k] > arr[k + 1]){
        //                 var temp = arr[k];
        //                 arr[k] = arr[k + 1];
        //                 arr[k + 1] = temp;
        //             }
        //         }
        //     }
        //     return arr;
        // }


        // console.log(bubbleSort(arr));

选择排序:(类似打擂台)

var arr = [6,5,1,3,2];

6,5,1,3,2
第一轮
5 6 1 3 2
1 6 5 3 2
1 6 5 3 2
1 6 5 3 2

第二轮
6 5 3 2

5 6 3 2
3 6 5 2
2 6 5 3


第三轮
6 5 3
5 6 3
3 6 5

第四轮
6 5
5 6
 var arr = [6,5,1,3,2];
        function chooseSort(arr){
            //确定几轮
            for(var i = 0 ; i < arr.length - 1 ; i++){
                //每一轮都和第一个比较
                for(var k = i + 1 ; k < arr.length ; k++){
                    //谁小放前面
                    if(arr[i] > arr[k]){
                        var temp = arr[i];
                        arr[i] = arr[k];
                        arr[k] = temp;
                    }
                }
            }
            return arr;
        }
        console.log(chooseSort(arr));

快速循环:

function quickSort ( arr ){
   // 递归结束条件
   if(arr.length <= 1){
       return arr;
   }
   var 
       midIndex = parseInt(arr.length / 2),  //取中间值索引
       midValue = arr[midIndex],
       leftArr = [],
       rightArr = [];
   
   //遍历arr数组。每一个值和中间的值相比较,大的放右侧数组。小的等的放左侧。
   for(var i = 0; i < arr.length; i++){
       // 如果是中间小标,跳出本次循环,(中间值不用和自身比较)
      if(i  == midIndex){
          continue;
      }
      if(arr[i] <= midValue){
          leftArr.push(arr[i]);
      }else{
          rightArr.push(arr[i]);
      }
   }
   // 调用递归函数处理左右数组
  var res = quickSort(leftArr).concat(midValue).concat(quickSort(rightArr));
  return res;
}
console.log(quickSort(arr));

 

转载于:https://www.cnblogs.com/zcjlllb/p/11461607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值