快速排序也采用了分治的策略,它的基本思想是:
1.先从序列中取出一个数作为基准数
2.将序列中比基准数大的数放在基准数的右边,小于或等于基准数的数放在基准数的左边
3.再对左右区间重复第二步,直到各区间只有一个数。
举例:对[20 40 35 28 60 48 55 50 17 67]进行快速排序
第一步:选择中间数60作为基准数(基准可以任意选取)
20 40 35 28 【60】 48 55 50 17 67
第二步:按顺序将每个数与基准数比较,小的放左边,大的放右边
[20 40 35 28 48 55 50 17] 【60】 [67]
第三步:不断重复一二步
[20 40 35 【28】 48 55 50 17] 60 [67]
[20 17] 【28】 [40 35 48 55 50] 60 67
17 20 28 [40 35 【48】 55 50] 60 67
17 20 28 [40 35] 【48】 [55 50] 60 67
1.先从序列中取出一个数作为基准数
2.将序列中比基准数大的数放在基准数的右边,小于或等于基准数的数放在基准数的左边
3.再对左右区间重复第二步,直到各区间只有一个数。
举例:对[20 40 35 28 60 48 55 50 17 67]进行快速排序
第一步:选择中间数60作为基准数(基准可以任意选取)
20 40 35 28 【60】 48 55 50 17 67
第二步:按顺序将每个数与基准数比较,小的放左边,大的放右边
[20 40 35 28 48 55 50 17] 【60】 [67]
第三步:不断重复一二步
[20 40 35 【28】 48 55 50 17] 60 [67]
[20 17] 【28】 [40 35 48 55 50] 60 67
17 20 28 [40 35 【48】 55 50] 60 67
17 20 28 [40 35] 【48】 [55 50] 60 67
17 20 28 35 40 48 50 55 60 67
<script>
function quickSort(arr){
if(arr.length<=1) {return arr;}
var baseIndex=Math.floor(arr.length/2);
var base=arr.splice(baseIndex,1)[0];
var left_arr=[],right_arr=[];
for(var i=0,len=arr.length;i<len;i++){
if(arr[i]<=base){
left_arr.push(arr[i]);
}
else{
right_arr.push(arr[i]);
}
}
return quickSort(left_arr).concat([base],quickSort(right_arr));
}
var array=[20,40,35,28,60,48,55,50,17,67];
var arr=quickSort(array);
document.write(arr+'<br>');
</script>