/**
* @Author: Kerven Han
* @Date:
* @Describe:
*/
public class QuickSort {public static void main(String[] args) {int[] arr = {2,3,4,1,22,90,45,12,89,12,99,33};
sort(arr);
for (int i = 0;
i < arr.length;
i++) {
System.out.println(arr[i]);
}
}public static int partition(int[] arr, int left, int right) {
int pivotKey = arr[left];
// 这里的两个while循环我们需要明白它们的含义
//这个是来空值左右两边交替扫描的,
while(left < right) {
//这个是来控制左边或者右边的指针移动的
while(left < right && arr[right] >= pivotKey)
{ right --;
}
arr[left] = arr[right];
//把小的移动到左边
while(left < right && arr[left] <= pivotKey)
{left ++;
}
arr[right] = arr[left];
//把大的移动到右边
}// 把两者相遇的点和基准值互换,是把基准值赋给了相遇的那个位置
arr[left] = pivotKey;
//最后把pivot赋值到中间//返回的是两者相遇的那个点
return left;
}/**
* 递归划分子序列
* @param arr
* @param left
* @param right
*/
public static void quickSort(int[] arr, int left, int right) {
if(left >= right) {return ;
}
int pivotPos = partition(arr, left, right);
quickSort(arr, left, pivotPos-1);
quickSort(arr, pivotPos+1, right);
}public static void sort(int[] arr) {
if(arr == null || arr.length == 0)
{return ;
}
quickSort(arr, 0, arr.length-1);
}}
也可也参考下别人的:
【算法|快速排序】https://blog.csdn.net/nrsc272420199/article/details/82587933?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.channel_param
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络