最近面试被问到冒泡排序和快速排序,要求现场手撕代码。
一.冒泡排序
function aryList(arry){
this. bubbleSort=function(){
var len=arry.length;
for(var i=0;i<len;i++){
for(var j=0;j<len-1;j++){
if(arry[j]>arry[j+1]){
swap(j,j+1);
}
}
}
return arry;
}
var swap=function(i,j){
var temp=arry[i];
arry[i]=arry[j];
arry[j]=temp;
}
}
var array=new aryList([19,16,14,12,5,6,9,8,7,4,3]);
var result=array.bubbleSort();
console.log(result);
Chrome下的测试结果:
二.快速排序
找出数组的中间值,然后定义两个数组分别存放比中间值小和比中间值大的数,最后把它们拼接起来。
function quikSort(arr){
if(arr.length<=1){
return arr;
}
var midIndex=Math.floor(arr.length/2);
var middle=arr.splice(midIndex,1)[0];
var left=[],right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<middle){
left.push(arr[i]);
}
else{
right.push(arr[i]);
}
}
return quikSort(left).concat(middle,quikSort(right));
}
var result=quikSort([9,7,6,5,4,3,12,14,16]);
console.log(result);