QuickSort
package Sort; /** * 复杂度:最坏情况下:O(n^2),像冒泡一样,每次比较都需要替换,但这种情况并不常见。平均复杂度是 O(nlogn) * 稳定性定义:数组arr中有若干元素,其中A元素和B元素相等。并且A元素在B元素前面,如果使用某种排序算法排序后, * 能够保证A元素依然在B元素的前面,可以说这个该算法是稳定的。 * * */ public class QuickSort { public static void main(String[] args) { int[] arr = new int[]{8, 9, 1, 7, 2, 3, 5, 4, 6, 0}; quickSort(arr, 0, arr.length - 1); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } public static void quickSort(int arr[], int begin, int end) { if (begin < end) { // 至少有两个以上的元素 int base = arr[begin]; // 设置第一个数为基准 int i = begin; int j = end; while (i < j) { while (i < j && arr[j] >= base) { // 从右往左找比base小的 j--; // 为什么每次都需要j先移动,因为当最后i和j相碰时,此时所指向的是j寻找到比基准值小的数字,然后和基准值交换能确保基准值左边的都是小于基准值的数字, // 但是如果i先右边移动的话,最后i和j相碰时,i和j所指向的是i寻找得比基准值大的数,此时和基准值相交换,基准值左边是有一个比基准值大的数,没有达到我们需要的排序效果。 } arr[i] = arr[j]; // 找到后,将比基准小的和左边比基准大的进行替换 while (i < j && arr[i] <= base) { // 然后从左往右找比base大的 i++; } arr[j] = arr[i]; // 找到后进行替换 } arr[i] = base; // 当两个指针相等时,就是基准的位置 quickSort(arr, begin, i - 1); quickSort(arr, i + 1, end); } else { return; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能