解答
思路:
快速排序使用了冒泡+分治的思路
1.每轮从数组中取出一个数作为基准
2.在排序过程中,小于或等于基准数的全部放到基准的左边,大于基准的全 部放右边
3.再对左边和右边依次进行上面两步,直到间距为1
具体方法:
1.每次取下标最小的数,记录为基准
2.指针j从后往前找比基准小的数,找到后,将该数放到第1步的下标数内
3.指针i从前往后找比基准大的数,找到后,将该数放第2步的下标数内
4.重复2,3步,直到i==j, 将第1步的基准数放在a[i]
单趟逻辑:
int splitArray(int []a , int left, int right)
{
int x = a[left]; //记录基准
while( left < right)
{
//先对right从右向左
while(left < right && a[right] >= x)
right--;
if(left < right)
{ a[left] = a[right]; i++; }
//再对left 从左往右
while(left < right && a[left] < x)
left ++;
if(left < right)
{ a[right] = a[left]; right--;}
}
a[left] = x; return left;
}
快速排序:
void quickSort(int [] a, int left, int right)
{
if(left < right)
{
int i = splitArray(a, left, right);
quickSort(a, left, i-1);
quickSort(a, i+1, right);
}
}
这问题真不好答