算法___快速排序(QuickSort)学习笔记
快速排序(QuickSort)学习笔记
解题思路
- 1、找基准:从数列中挑出一个元素,称为 "基准"(pivot)
- 2、分区:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置
- 3、递归:递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
图解
下面以数列a={30,40,60,10,20,50}为例,演示它的快速排序过程(如下图)
Java代码(含注释)
import java.util.*;
import static java.lang.System.out;
public class QuickSort {
public void quickSort(int[] array, int left, int right) {
if(left<right){ //最起码array[left]...array[right]中中有两个元素
int pivot = array[left]; //比pivot小的数据放到左边,大的放右边
int i = left;
int j = right;
while (i < j) { //"分区",i<=j时退出循环
//从右往左遍历(j--),直到找到小于等于pivot的元素:array[j],/将array[j]移动到“左边”
while ((i < j) && (array[j] > pivot)) j--;
if(i < j) array[i++]=array[j];
//从左往右遍历(i++),直到找到大于等于pivot的元素:array[i],准备将array[i]移动到“右边”
while ((i < j) && (array[i] < pivot)) i++;
if(i < j) array[j--]=array[i];
}
array[i]=pivot; //将pivot放到正确的位置上,此时:i==j
quickSort(array, left, i - 1); //分治,对pivot左边的部分数组“快速”排序
quickSort(array, j + 1, right); //分治,对pivot右边的部分数组“快速”排序
}
}
public static void main(String[] args) {
//测试序列
int[] arr = {73,30,3,7,9,122344,4656,31,34,4656,5,6,7,8,9,343,57765,23,1232};
out.println("未排序数组:"+Arrays.toString(arr));
(new QuickSort()).quickSort(arr,0,arr.length-1);
out.println("排序后数组:"+Arrays.toString(arr));
}
}
分类:
算法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战