快速排序
今天说一说快速排序
什么是快速排序:
快速排序是对冒泡排序的一种改进算法 因为冒泡排序需要每次都对相邻的两个数进行比较 显然非常浪费时间,而快速排序之所以这么叫 当然是因为它快了
快速排序也使用的分治法 类似于归并 并且是在冒泡的基础上 可以说集两种算法的优点
我理解的快速排序也可以说是 “分区”的方法
快速排序的思路
- 首先找到一个基准值(pivot)
- 然后在利用两个指针 一个在左 一个在右 向中间搜索
- 当左指针遇到比基准值小的停止 当右指针遇到比基准值大的停止
- 然后交换两个元素的位置 使这个基准值处于数列的中间位置
- 之后开始递归 不断的寻找基准值并把其放置在数列中间 直到排序完成
引入五分钟算法图 演示
代码如下
//快速排序 public int[] fastSort(int[] sourceArray){ // 对 arr 进行拷贝,不改变参数内容 int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); return quickSort(arr, 0, arr.length - 1); } //开启排序 private int[] quickSort(int[] arr, int left, int right) { if (left < right) { int partitionIndex = partition(arr, left, right); //开始递归 将基准值处中间位置把数组分区 quickSort(arr, left, partitionIndex - 1); quickSort(arr, partitionIndex + 1, right); } return arr; } //分区 private int partition(int[] arr, int left, int right) { // 设定基准值(pivot) int pivot = left; int index = pivot + 1; //计数器 //从基准值下一个元素开始遍历 for (int i = index; i <= right; i++) { //当元素小于基准值 则调换位置 if (arr[i] < arr[pivot]) { swap(arr, i, index); index++; } } swap(arr, pivot, index - 1); return index - 1; } //交换两个元素 private void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构