算法-交换排序算法之快速排序
交换排序#
- 交换排序算法描述:比较相邻两个元素大小,如果反序,则交换。
- 交换排序算法有两种:冒泡排序和快速排序
快速排序#
算法描述#
快速排序在数据序列中选择一个元素做为基准值(一般会选择第一个元素或最后一个元素),每趟从数据序列的两端开始交替进行,将小于基准值的元素交换到序列前端,将大于基准值的元素交换到序列的后端,介于两者之间的位置则成为基准值的最终位置。同时,序列被划为两个子序列,在分别对了个子序列进行快速排序,直到子序列的长度为1,则完成排序。
算法思路#
算法实现#
public static void quickSort(int[] arr, int begin, int end) {
// 序列有效
if (begin >= 0 && begin < end && end < arr.length) {
int i = begin, j = end; // begin 为左边最开始的元素的下标;end 为最后一个元素的下标
int x = arr[i]; // 以第一个的元素为基准
while (i != j) { // 当交叉比较时 左边和右边下标发生重合子运行结束
while (i < j && arr[j] >= x) { // 从右边向前寻找较小的值移动,不移动与基准值相等的元素
j--;
}
if (i < j) {
arr[i++] = arr[j]; // 子序列的后端较小元素向前移动
}
while (i < j && arr[i] <= x) {
i++;
}
if (i < j) {
arr[j--] = arr[i]; // 子序列前端较大的元素向后移动
}
}
arr[i] = x; // 将基准值放入最终位置
quickSort(arr, begin, j - 1); // 前端子序列再排序,递归调用
quickSort(arr, i + 1, end); // 后端子序列在排序,递归调用
}
}
分类:
Algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)