t实现

王朝学院·作者佚名  2016-05-23
窄屏简体版  字體: 小  |  中  |  大  |  超大  

快速排序算法javascript实现

function quicksort(arr){function q(start,end){if(start>=end){return;}var pivot= start,temp = arr[pivot],i = start+1;for(;i<=end;i++){if(arr[i]<temp){var s = arr.splice(i,1)[0];arr.splice(start,0,s);pivot++;}}q(start,pivot-1);q(pivot+1,end);}q(0,arr.length);return arr;}var arrs = [9,45,45,90,3,77,4,90];var c = quicksort(arrs);console.log(c);

第3行的if(start>=end){return;},以这样的方式退出递归,我是这么考虑的。

当子数组中剩两项时,分两种情况分析:

(1)当子数组第一项(传递给参数start)比第二项(传递给参数end)小

在函数q中先做了一遍调整,最后变量start指向第一项,变量pivot指向第一项,然后是:

q(start,pivot-1);//此时start==pivot,故start>pivot-1,通过if(start>=end){return;}退出递归

q(pivot+1,end);//此时pivot+1==end,同理退出递归

(2)当第一项比第二项大

在函数q中做一遍调整,最后变量start指向第一项,变量pivot指向第二项,然后:

q(start,pivot-1);//此时start==pivot-1,退出递归

q(pivot+1,end);//此时pivot+1>end;也退出递归

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航