JavaScript—-快速排序算法(Quciksort)实现
先来阮大哥的教程。简单易懂,初入JS的最好学习圣地
http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html
快速排序算法的思想
- 在数据集中选择一个元素作为基准。
- 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。
- 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
举例:[85, 24, 63, 45, 17, 31, 96, 50],怎么进行排序呢? - 第一步 选择中间元素45,作为“基准”。
- 第二步。按照顺序将每个值都与“基准”比较,形成两个子集,比”基准”小的值放在左边,比“基准”大的值放在右边。
- 第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
下面用JS代码来实现这一思想过程
var myArr = [85, 24, 63, 45, 17, 31, 96, 50];
function quickSort(arr){
if (arr.length <= 1){
return arr;
}//如果数组的长度<1,就直接返回数组
var left = [];//左边的数组
var right = [];//右边的数组
var pivotIndex =Math.floor(arr.length / 2);//选基准,floor()方法为向下取整
var pivot = arr.splice(pivotIndex,1);//基准数组
for(var i = 0; i < arr.length;i++){//然后,开始遍历数组,小于"基准"的元素放入左边的子集,大于基准的元素放入右边的子集。
if(arr[i] < pivot){
left.push(arr[i]);
}else {
right.push(arr[i]);
}
}
return quickSort(left).concat(pivot,quickSort(right));//使用递归不断重复这个过程,就可以得到排序后的数组。
}
var a = quickSort(myArr);
console.log(a);
在使用时,直接调用quickSort()方法即可。