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)