06快速排序 O(nlogn) 不稳定

let nums = [1, 4, 2, 8, 7, 3, 5, 9]
        const quickSort = (nums) => {

            if (nums.length < 2) {
                return nums;
            } else {
                var left = [];
                var right = [];
                var pivot = Math.floor(nums.length / 2); // Math.floor 向下取整
                var base = nums.splice(pivot, 1)[0];
                for (let i = 0; i < nums.length; i++) {
                    if (nums[i] < base) {
                        left.push(nums[i]);
                    } else {
                        right.push(nums[i]);
                    }
                }
            }
            return quickSort(left).concat([base], quickSort(right));
        }
        console.log(quickSort(nums));

  

快速排序核心:将关键字较大的记录从前面移到都免,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。

 原地快排

  function quickSort(arr, i, j) {
            if (i < j) {
                let left = i;
                let right = j;
                let pivot = arr[left]; //备份基准值
                while (i < j) {
                    while (arr[j] >= pivot && i < j) { // 从后往前找比基准小的数
                        j--;
                    }
                    if (i < j) {
                        arr[i++] = arr[j];
                    }
                    while (arr[i] <= pivot && i < j) { // 从前往后找比基准大的数
                        i++;
                    }
                    if (i < j) {
                        arr[j--] = arr[i];
                    }
                }
                arr[i] = pivot;
                quickSort(arr, left, i - 1);
                quickSort(arr, i + 1, right);
                return arr;
            }
        }

 

posted @ 2021-03-05 11:14  Jiox  阅读(77)  评论(0)    收藏  举报