快排算法

  public void quickSort(int[] nums,int left,int right)
        {
            if (nums.Length==0||nums==null||left>right)
            {
                return;
            }
            int i = left;
            int j = right;
            int key = nums[left];////这个key是会变的,以每次数组的最左边一个数为key,即比较的对象,i往右移遇到比key大的数就停住,j往左移遇到比key小的数就停住,两个都停住时
            while (i!=j)//也可以是while (i<j)
            {
                while (nums[j]>=key&&j>i)
                {
                    j--;
                }
                while (nums[i]<=key&&i<j)
                {
                    i++;
                }
                //nums[i]与nums[j]互换,前提是i<j(大前提)
                if (i<j)
                {
                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                }
            }
          
            nums[left] = nums[i];//因为nums[i]永远会比key小,因为他会与nums[j]互换,而nums[j]只有比key小的时候才会停住
            nums[i] = key;
            quickSort(nums, left, i - 1);
            quickSort(nums, i + 1, right);
          
        }

时间复杂度为O(nlogn)

原文地址:https://www.cnblogs.com/wl889490/p/12824025.html