算法图解:快速排序
截图来自《算法图解》这本书
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWzkMyQZ-1659253532312)(https://xuemingde.com/pages/image/2022/07/20/19531762PXaC.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GHhNwZtk-1659253532312)(https://xuemingde.com/pages/image/2022/07/20/195332L4J7MK.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uKu99VXj-1659253532313)(https://xuemingde.com/pages/image/2022/07/20/195416wXeqVW.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZJ1XwHk-1659253532313)(https://xuemingde.com/pages/image/2022/07/20/195429YFQ2fz.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADphjrD0-1659253532314)(https://xuemingde.com/pages/image/2022/07/20/195440LvEIGd.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGC9GQ7R-1659253532314)(https://xuemingde.com/pages/image/2022/07/20/195535lzuGZv.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgkAFX6C-1659253532315)(https://xuemingde.com/pages/image/2022/07/20/1956043TNZAG.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VaSCR2n-1659253532315)(https://xuemingde.com/pages/image/2022/07/20/195617LrPWyW.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZhgCJXL-1659253532316)(https://xuemingde.com/pages/image/2022/07/20/195643EqMOlZ.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCsS5jMZ-1659253532316)(https://xuemingde.com/pages/image/2022/07/20/195703LI4krg.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flezi5I8-1659253532317)(https://xuemingde.com/pages/image/2022/07/20/195714NG7uG0.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c57K61DR-1659253532317)(https://xuemingde.com/pages/image/2022/07/20/195737m3moV0.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KX1dxqJ-1659253532318)(https://xuemingde.com/pages/image/2022/07/20/195747uaEadK.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZBLliAn-1659253532318)(https://xuemingde.com/pages/image/2022/07/20/195815v3FnsY.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dOfVCCw-1659253532319)(https://xuemingde.com/pages/image/2022/07/20/195918yAVu0f.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2UaZ4Go8-1659253532319)(https://xuemingde.com/pages/image/2022/07/20/195929zahbRL.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bcbD3fGi-1659253532321)(https://xuemingde.com/pages/image/2022/07/20/200048wGM9ya.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hc5e00Iq-1659253532322)(https://xuemingde.com/pages/image/2022/07/20/2000587Nv61z.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SHIij4DX-1659253532323)(https://xuemingde.com/pages/image/2022/07/20/200123bdbhKB.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8K46ngRW-1659253532324)(https://xuemingde.com/pages/image/2022/07/20/200135vcMWW5.png)]
代码实现:
public class QuickUtil {
public static int[] quickSort(int[] ints, int start, int end){
if (start > end){
return ints;
}
//基点,第一个数
int pivot = ints[start];
//左指针
int left = start;
int right = end;
while (left < right){
while (ints[right] >= pivot && left < right){
right --;
}
while (ints[left] <= pivot && left < right){
left ++;
}
if (left < right){
int temp = ints[right];
ints[right] = ints[left];
ints[left] = temp;
}
}
ints[start] = ints[left];
ints[left] = pivot;
quickSort(ints, start, left -1);
quickSort(ints, left + 1, end);
return ints;
}
public static void main(String[] args) {
int[] arr = {81, 65, 17, 1, 71, 9, 26, 12, 93, 30, 55};
int[] ints = quickSort(arr, 0, arr.length - 1);
System.out.println(JSON.toJSONString(ints));
}
}
过程讲解:
选出基准值,可以随意选择,但一般会选择最后一个数或者第一个数作为基准值。
这里选择第一个数作为基准值。
指定两个指针,left和right,left从左边开始寻找,right从右边开始寻找。
left找出一个比基准值大的值停止寻找。
right找出一个比基准值小的值停止寻找。
然后两个值进行交换。(93和55交换)
继续往下寻找。。
当left和right相等时,left(right)对应值与基准值进行交换。
以81为分界线,分为两段继续进行排序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ta9vsJH6-1659253532327)(https://xuemingde.com/pages/image/2022/07/20/204205gS1UXp.png)]
第一段的开始值为start 和 left-1(或right-1)
第一段的开始值为left+1(或right+1)和 end
(此时left为它与right相等时的下表,这个下标的值与基准值交换后,就是基准值了,基准值左边的是比自己小的,右边是比自己大的)
使用递归,第一段和第二段继续排序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uPcHEzOP-1659253532328)(https://xuemingde.com/pages/image/2022/07/20/205421Qsyffc.png)]
……