码迷,mamicode.com
首页 > 编程语言 > 详细

JS冒泡排序,快速排序,二分查找

时间:2018-05-17 22:26:09      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:[]   循环   http   com   cat   push   没有   targe   max   

//冒泡排序

思想:一个数组双层循环,判断左右相邻的两个数值,大的在右小的在左,如果左的比右的大,双方替换位置

之所以要数组的长度减一,是因为数组是从0开始的,比如说一个数组有7个元素,它的长度为7,分别为
a[0],a[1],a[2],a[3]a[4],a[5],a[6]这7个所以当你要取数组中最后一个a[6]时是需要用长度减1的
而为什么要减i呢,则是因为你的冒泡排序是把最大的放到最后一位,比如第一次循环的时候进行排序完,最后一位是最大的了,根本没有必要在第二次循环当中把他在拿去比大小了吧,并且如果不减i的话,只能排出最大一位(可以用来进行求数组中最大的值),以此类推……

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

function test(arr){

     for(var i=0;i<arr.length-1;i++){    //-1是因为你要循环这个数组的长度-1次。因为前一轮浮上去的最大值不可能后面出现能比过它的

           for(var j=0;j<arr.length-1-i;j++){   //-1-i是因为他的长度在不段变小,

               if(arr[j]>arr[j+1]){

                      var temp=arr[j];

                      arr[j]=arr[j+1];

                     arr[j+1]=arr[j];

                 }

          }

     }

       return arr;

}

//快速排序

思想:给数组找一个中间的分割点,把数组分成左右两区,用数值去比较这个中间值,小的放左区,大的放右区,然后递归调用,实现快速排序

function test1(arr){

    if(arr.length<=1){ return arr}

    var left=[],right=[],mid=arr.splice(Math.floor(arr.length/2),1);

    for(var i=0;i<arr.length;i++){

       if(arr[i]<mid){

           left.push(arr[i]);  

     }else{

         right.push(arr[i]);

       }

   }

   return test1(left).concat(mid,test1(right));

}

//二分查找

//非递归调用,适用于数组存在负数值查找

function test3(data,das){

    var  max=data.length-1;

    var min=0;

    while(min<=max){

       var mid=Math.floor((min+max)/2,1);

        if(data[mid]==das){

       return mid;  

   }  else if(das>data[mid]){

          min=mid+1;  

      }else{

         max=mid-1;

     }

   }

    return false;

}

JS冒泡排序,快速排序,二分查找

标签:[]   循环   http   com   cat   push   没有   targe   max   

原文地址:https://www.cnblogs.com/JQ-Attribute/p/9053597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!