QuickSort

作者: 苏州城外无故人 | 来源:发表于2019-03-20 16:38 被阅读0次
    package Java;
    
    public class QuickSort {
        /**
         * 时间复杂度O(nlogn)
         * 空间复杂度O(logn)递归需要栈的辅助
         * 最坏时间复杂度O(n^2)
         * @param nums
         * @param start
         * @param end
         */
    
        public static void QuickSort(int[] nums, int start, int end) {
            int i = start;
            int j = end;
            if (start >= end) {
                return;
            }
            int temp = nums[i];
            while (i < j) {
                //从右往左扫描,找到小于temp的值
                while (i < j && nums[j] >= temp) {
                    j--;
                }
                //找到小于temp的值,将其赋值给nums[i],并将i向右移一位。
                if (i < j) {
                    nums[i] = nums[j];
                    i++;
                }
                //从左往右扫描,直到找到大于temp的值
                while (i < j && nums[i] <= temp) {
                    i++;
                }
                //找到大于temp的值,将其赋值给nums[j],并将j往左移一位。
                if (i < j) {
                    nums[j] = nums[i];
                    j--;
                }
            }
            //最后是temp的值
            nums[i] = temp;
            //递归将temp左边的数组排序
            QuickSort(nums, start, i - 1);
            QuickSort(nums, i + 1, end);
            //递归将temp右边的数组排序
        }
    
    
        public static void main(String[] args) {
            int[] nums = {6,89,2,11,3,79,51,19,87};
            QuickSort(nums, 0, nums.length - 1);
    
            for (int i = 0; i < nums.length; i++) {
                System.out.print(nums[i] + " ");
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:QuickSort

          本文链接:https://www.haomeiwen.com/subject/csrtvqtx.html