今天看到了阮一峰老师的一篇日志,讲的是快速排序算法,个人认为阮老师讲得思路特别清晰明了,非常好理解·。但是苦于分享平台没有简书,又不想一个人独享这么好的教程,于是就在这里链接一下:
http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html
大家可以去阮老师的博客里认真看看哦。
贴一下思路:
(1)在数据集之中,选择一个元素作为"基准"(pivot)。
(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
示例:
var arr1=[85, 24, 63, 45, 17, 31, 96, 50];
function quickSort(arr){
if(arr.length<=1){
return arr;
}
var left=[];
var right=[];
var pivotIndex=Math.floor(arr.length/2);
var pivot=arr.splice(pivotIndex,1)[0];
for(var i=0;i<arr.length;i++){
if(arr[i]<pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
//这里有一小点跟阮老师的不一样,就是阮老师用的是[pivot],我则直接使用的pivot,因为concat()参数非常随意,可以是数组也可以是散值,不影响结果的哦
return quickSort(left).concat(pivot,quickSort(right));
}
console.log(quickSort(arr1));
之前看的别的所谓的快排算法看了之后都一脸懵逼,看了阮老师的则有恍然大悟的感觉,(#.#)
网友评论