八大排序算法之快速排序(Java实现)
2021/6/17 22:25:59
本文主要是介绍八大排序算法之快速排序(Java实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考书籍:大话数据结构P417
不要急着写代码,先捋思路,可以先参照代码进行理解
快排基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的数字都比另一部分小,则分别对这两部分进行递归排序,以达到有序的目的
以从小到大排序为例,首先选左边第一个为基准值(当然你也可以选其他),然后设置两个指针,从右往左找到比基准值小的数然后与基准值交换,相当于比基准值小的换到左边,再从右往左,找到比基准值大的然后与基准值交换,相当于比基准值大的换到右边
过程如图,一遍排序之后,基准值就会到中间,左边均小于基准值,右边则均大于
{20,10,40 ,50, 70,80,60,90}
不过还没排好序,还需要对左右两边进行递归排序,不断重复此过程
代码实现如下:
package Sort; import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int[] arr = {50,10,90,70,40,80,60,20}; quickSort(arr, 0, arr.length-1); } public static void quickSort(int[] arr,int left,int right){ int pivot=0;//基准值的索引 if(left<right) { //将数组一分为二 pivot = partition(arr,left,right); //左递归 quickSort(arr, left, pivot-1); //右递归 quickSort(arr, pivot+1, right); } } //排序并返回基准值的索引 public static int partition(int[] arr,int left,int right) { int pivotkey=arr[left];;//基准值 while(left<right) { //找到比基准值小的 while(left<right && arr[right]>=pivotkey) { right--; } //比基准值小的数与基准值交换,即放在基准值的左边 swap(arr,left,right); //找到比基准值大的 while(left<right && arr[left]<=pivotkey) { left++; } //比基准值大的数与基准值交换,即放在基准值的右边 swap(arr,left,right); } //打印排序之后的序列 System.out.println(Arrays.toString(arr)); return left; } //交换 public static void swap(int[] arr,int left,int right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } }
为什么外面已经有left<right判断了,里面还要进行判断?
这是因为内循环改变了left和right的值,不做判断就会在里面的while循环一直循环
为什么以一个为基准值要从右开始找?
如图,
快排之所以快,每次交换是跳着换,而冒泡是相邻交换,首尾交换为例,快排直接1次对换,而冒泡要换n-1次
这篇关于八大排序算法之快速排序(Java实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求