码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript实现快速排序

时间:2016-08-29 17:31:02      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

思想:

通过分治思想、递归方法将数据依次分解为包含较小元素和较大元素的不同子序列

1.在数组中选择一个元素为基准

2.对数组进行遍历,小于基准的元素都移到基准的左边,大于基准的元素都移到基准的右边

3.对基准左边和右边的两个子集,不断重复前两步,直到所有子集只剩下一个元素为止

 

(基准以首元素的情况)

function sqort(arr){

  if(arr.length===0){

   return [];

}

var left=[];

var right=[];

var pivot=arr[0];(基准以首元素)

for(var i=1;i<arr.length;i++){

 if(arr[i]<pivot){

  left.push(arr[i]);

}else{

 right.push(arr[i]);

}

}

return sqort(left).concat(pivot,qsort(right));//递归

}

var a=[];

for (i=0;i<10;++i){

a[i]=Math.floor(Math.random()*100+1);

}

console.log(a);

console.log(qsort(a));

 

(基准以中间元素的情况)

function sqort(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=1;i<arr.length;i++){

 if(arr[i]<pivot){

  left.push(arr[i]);

}else{

 right.push(arr[i]);

}

}

return sqort(left).concat(pivot,qsort(right));//递归

}

var a=[12,34,23,78,34,26];

console.log(a);

console.log(qsort(a));

 

ps:  对于较小数组和较大数组分别递归调用sqort()函数,当递归结束时候,再将较小的数组与基准以及较大的数组连接起来形成最终的有序数组并返回。

JavaScript实现快速排序

标签:

原文地址:http://www.cnblogs.com/haimengqingyuan/p/5818462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!