排序算法

1.快速排序:

思路:找到数组中间的元素,把它单拎出来,然后从0开始判断数组中的元素比该基准元素大还是小,小的存左边,大的存右边,然后如此反复递归,得出结果。

function quickSort(arr){
if(arr.length<=1){
return arr;

}
var mid=arr.splice(Math.floor(arr.length/2),1);
var leftArr=[];
var rightArr=[];
for(var i=0;i<arr.length;i++){
if(parseInt(arr[i])<=mid){
leftArr.push(arr[i]);
}
else{
reightArr.push(arr[i]);
}
}
return quickSort(leftArr).concat(mid,quickSort(rightArr))
}

2.冒泡排序

1.比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2.第一轮的时候最后一个元素应该是最大的一个。
3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较。


function quickSort(arr){
var temp;
    for(var i=0;i<arr.length-1;i++){
        for(var j=0;j<arr.length-1-i;j++){
            if(arr[j]>arr[j+1]){
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
   return arr;
}
console.log(quickSort([4,8,2,6,47,7]))



3.二分查找法

递归实现


function search(item,arr,start,end) {
    var start=start || 0;
    var end=end || 0;
    var mid=Math.floor((start+end)/2);
    if(item=arr[mid]){
        return arr[mid];
    }
    if(item>arr[mid]){
        return search(item,arr,mid+1,end)
    }else return search(item,arr,start,mid+1)
    return 0;
  }
  console.log(search(5,[4,7,8,65,5,34]))


非递归实现


function search(arr,item) {
    var start=0;
    var end=arr.length-1;
     arr.sort(function(a,b){
        return a-b
    })
    while(start<=end){
        var mid=Math.floor((start+end)/2);
        if(item==arr[mid]){
            return arr[mid];
        }
        else if(item<arr[mid]){
           end=mid-1;
        }
    else
    {
         start=mid+1;
    }
}
    return 0;
  }
  console.log(search([6,7,34,7,76,5,6,2],5))




posted on 2020-03-05 13:31  是夏目呀  阅读(106)  评论(0编辑  收藏  举报

导航