三种排序+二分查找

141 阅读1分钟
//冒泡排序
    function bubbleSort(arr){
	for(var i=0;i<arr.length;i++){//外层控制循环圈数
	    for(var j=0;j<arr.length-1-i;j++){//内层循环控制项数之间的交换
	        if(arr[j+1]<arr[j]){
		    var temp;//借用第三个变量,实现数据交换
		    temp=arr[j];
		    arr[j]=arr[j+1];
		    arr[j+1]=temp;
	        }
	    }
    }
		return arr;
	}
 //归并排序
    function merge(leftArr,rightArr){
        while(leftArr.length&&rightArr.length){
            if(leftArr[0]<rightArr[0]){
                result.push(leftArr.shift())
            }else{
                result.push(rightArr.shift())
            }
        }
        return result.concat(leftArr).concat(rightArr)
    }
    function mergeSort(arr){
        if(arr.length===1){
            return arr;
        }
        var middleIndex=Math.floor(arr.length/2)
        var left=arr.slice(0,middleIndex);
        var right=arr.slice(middleIndex)
        return merge(mergeSort(left),mergeSort(right))
    }
//快速排序
function quickSort(arr){
        var middleIndex=Math.floor(arr.length/2);//获取中间索引
        var middle=arr.splice(middleIndex,1);//获取中间数
        var left=[];
        var right=[];
        for(var i=0;i<arr.length;i++){
            if(arr[i]<middle){
                left.push(arr[i])
            }else{
                right.push(arr[i])
            }
        }
        return quickSort(left).concat(middle,quickSort(right));
    }
//递归查找
    function binaraySearch(arr,item,start,end){
        var start=start||0
        var end=end||arr.length-1
        if(start>end){
            return '404';
        }
        var middle=parseInt((start+end)/2)
        if(arr[middle]===item){
            return middle;
        }else if(arr[middle]>item){
            end=middle-1;
            return binaraySearch(arr,item,start,end)
        }else if(arr[middle]<item){
            start=middle+1;
            return binaraySearch(arr,item,start,end)
        }
    }
 //非递归
    function binaraySearch1(arr,item){
        var start=0;
        var end=arr.length-1;
        while(start<=end){
            var middle=parseInt((start+end)/2)
            if(item===middle){
                return middle
            }else if(item>arr[middle]){
                start=middle+1;
            }else if(item<arr[middle]){
                end=middle-1;
            }else{
                return -1;
            }
        }
    }