functionbinarySearch(data,dest,start,end){ var end=end || data.length-1; var start=start || 0; var m=Math.floor((start + end)/2); if(data[m]==dest){ return m; } if(dest < data[m]){ returnbinarySearch(data,dest,0,m-1); }else{ returnbinarySearch(data,dest,m+1,end); } returnfalse; } var arr=[1,2,3,4,5,6,7,8,9,10]; document.write(binarySearch(arr,4));
3.2.2 非递归方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
functionbinarySearch(data,dest){ var h=data.length-1; var l=0; while (l<=h) { var m=Math.floor((h+l)/2); if(data[m] ==dest){ return m; } if(dest >data[m]){ l=m+1; }else{ h=m-1; } } returnfalse; } var arr=[1,2,3,4,5,6,7,8,9,10]; document.write(binarySearch(arr,4));
functionheapSort(array){ console.log('堆排序耗时:'); if(Object.prototype.toString.call(array).slice(8,-1)==='Array'){ var heapSize=array.length,temp;//建堆 for (var i=Math.floor(heapSize / 2) -1; i>=0; i--) { heapify(array,i,heapSize); } for(var j=heapSize-1;j>=1;j--){//堆排序 temp=array[0]; array[0]=array[j]; array[j]=temp; heapify(array,0,--heapSize); } console.log('堆排序耗时:'); return array; }else{ return'array is not an Array!'; } }
functionheapify(arr,x,len){ if(Object.prototype.toString.call(arr).slice(8,-1)==='Array' && typeof x==='number'){ var l = 2 * x + 1, r = 2 * x + 2, largest = x, temp; if(l < len && arr[l] > arr[largest]){ largest = l; } if(r < len && arr[r] > arr[largest]){ largest = r; } if(largest != x){ temp = arr[x]; arr[x] = arr[largest]; arr[largest] = temp; heapify(arr,largest,len); } }else{ return'arr is not Array or x is not a number!'; } } var arr=[91,60,96,86,13,73,63,40,30,71,88]; document.write(heapSort(arr));
functioncountingSort(array){ var len = array.length, B = [],C = [], min = max =array[0]; console.time('计数排序耗时:'); for (var i = 0; i < len; i++) { min = min <= array[i] ? min : array[i]; max = max >= array[i] ? max : array[i]; C[array[i]] = C[array[i]] ? C[array[i]] + 1 : 1; } for (var j = min; j < max; j++) { C[j+1] = (C[j + 1] || 0) + (C[j] || 0); } for (var k = len - 1; k > 0; k--) { B[C[array[k]] - 1] =array[k]; C[array[k]]--; } console.timeEnd('计数排序耗时:'); return B; } var arr=[2,2,3,5,4,2,8,6,7,69,5,2,1,3,4,7,3,6]; document.write(countingSort(arr));