快速排序
思想:
- 在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素;
- 将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边;
- 对左右两个分区重复以上步骤直到所有元素都是有序的。
所以把快速排序联想成东拆西补或西拆东补,一边拆一边补,直到所有元素达到有序状态。
public static int[] quick(int [] arr,int start,int end) {
//设置变量
int left = start;
int right = end;
int temp = 0;
//left 必须小于等于 right
if (left <= right) {
//设置基准
temp = arr[start];
//设置循环条件,等到left=right时填入基准temp
while (left!=right){
//循环找出小于temp的数组值的下标
while (right>left&&arr[right]>=temp) {
right--;
}
//赋值
arr[left] = arr[right];
//循环找出大于temp的数组值的下标
while (left<right&&arr[left]<=temp) {
left++;
}
//赋值
arr[right]=arr[left];
}
//填入基准
arr[right] = temp;
//根据基准分为两边,分别进行递归
quick(arr,start,left-1);
quick(arr,right+1,end);
}
return arr;
}
本文来自博客园,作者:发生什么事了?,转载请注明原文链接:https://www.cnblogs.com/itsanjin/p/16835273.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了