排序算法
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))