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

Posted jq-attribute

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS冒泡排序,快速排序,二分查找相关的知识,希望对你有一定的参考价值。

//冒泡排序

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

之所以要数组的长度减一,是因为数组是从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冒泡排序,快速排序,二分查找的主要内容,如果未能解决你的问题,请参考以下文章

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序

14Java常用类(StringBuffer)排序算法(冒泡排序选择排序插入排序快速排序)查找算法(二分查找)

各种排序方法(冒泡,快速,插入,选择),二分查找

顺序表的增删查改二分查找冒泡和快速排序

js冒泡排序法——选择排序(other)——计数排序(桶排序)——快速排序——插入排序-更新