多语言展示
当前在线:646今日阅读:183今日分享:45

图解快速排序(使用递归算法)

利用递归算法进行快速排序。
工具/原料

javascript语言

方法/步骤
1

初始状态,设置基准值,将数组中的第一个值作为基准值,即数字6。

2

第一次循环,j找到小于6的值后,停止寻找,i找到大于6的值后,停止寻找。

3

将两者数值交换。

4

第二次循环,j找到小于6的值后,停止寻找,i找到大于6的值后,停止寻找。

5

两者数值交换。

6

第三次循环,j找到小于6的值后,停止寻找,i找到大于6的值后,停止寻找。

7

当j找到小于6的值后,停止寻找,i开始循环,寻找大于6的值,当i=j时,结束循环。将i的值与基准值交换。

8

此时,在基准值6的左侧均为小于6的值,右侧为大于6的值。再使用递归算法,将左右两边数组进行排序。

方法/步骤2
1

代码段(使用js语言)。function quickSort(num,from,to){            var from = from != undefined ? from : 0;  //开始位置            var to = to != undefined ? to : num.length-1; //结束位置            var i = from;              var j = to;            var key = num[from]; //基准值            var temp;  // 临时变量,用于数字交换            if(i>=j){                return num;  //递归出口            }            while(ikey){                       j--;                }                //i的目标是寻找比基准值大的值,                //故当num[j]的值小于基准值时,需要往右移动,即i++,                //直到找到大于基准值的情况下退出循环,并记录下此时的i值。                while(i

2

注意点:1、to = to != undefined ? to : num.length-1; 函数开始时需要有一个判断值是否为undefined的语句,不能直接写 to = to ? to: num.length-1,因为在函数执行的过程中,到递归语句时,可能会传入0,如果传入0,会将to赋值为num.length-1,导致函数运行不正确。2、while(ikey),该代码容易产生误解,容易写成num[j]

注意事项

如果觉的此经验比较有用,请点击'投票”和“有得”,不胜感激! 如果经验有欠缺,请评论指出,谢谢!

推荐信息