快速排序js实现

190 阅读1分钟

快速排序又是一种分而治之思想在排序算法上的典型应用。

就是在数组中随机选取一个基数,将比这个基数小的值放在左边区域,比这个基数大的放在右边区域。再对左右两个区域进行递归,循环这个过程,直到数组从小到大排成有序序列。

以下是个人在学习过程中接触到的一种比较容易理解的方法。

var quickSort = function (arr) {
                // 检查数组的元素个数,如果小于等于1,就返回
                if (arr.length <= 1) { return arr; }

                // 选择"基准"(pivot),可以任意选取,这里选择的是中间的值
                var pivotIndex = Math.floor(arr.length / 2);
                // 划分区域时先将这个基数从数组中去除
                var pivot = arr.splice(pivotIndex, 1)[0];

                // 定义两个空数组,用来存放左右两个子集。
                var left = [];
                var right = [];

                // 开始遍历数组,小于"基准"的元素放入左边的子集,大于基准的元素放入右边的子集
                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));
            };