校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 快速排序
题目

快速排序

解答

思路:

快速排序使用了冒泡+分治的思路

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);
}
}

C 1条回复 评论
小小

这问题真不好答

发表于 2021-09-09 18:05:00
0 0