Day565.快速排序 -数据结构和算法Java
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day565.快速排序 -数据结构和算法Java相关的知识,希望对你有一定的参考价值。
快速排序
一、介绍
二、示意图
三、算法思路分析
四、代码实现
package com.achang.sort;
import java.util.Arrays;
/**
* @Author Achang
* @Date 2022/3/22 22:08
* 快速排序
**/
public class QuickSort
public static void main(String[] args)
int arr[] = -9,78,0,23,-567,70;
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
/**
* 快速排序算法
* @param arr 待排序数组
* @param leftIndex 最左边索引
* @param rightIndex 最右边索引
*/
public static void quickSort(int arr[],int leftIndex,int rightIndex)
int l = leftIndex;//左下标
int r = rightIndex;//右下标
int pivot = arr[((leftIndex+rightIndex)/2)];//中轴
int temp = 0;
//让比pivot值小的放到左边,比pivot大的值放到右边
while (l < r)
//在pivot左边一直找,找到一个比pivot大于等于的值
while (arr[l] < pivot)
l += 1;
//在pivot右边一直找,找到一个比pivot小于等于的值
while (arr[r] > pivot)
r -=1;
if ( l >= r) break;//找到了,说明pivot的左右两的值,都已经按照左边全是小于等于pivot的值,右边全部都是大于等于pivot的值
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//如果交换完后,发现arr[l] == pivot值相等,那就向前一步
if (arr[l] == pivot) r-=1;
//如果交换完后,发现arr[r] == pivot值相等,那就向后一步
if (arr[r] == pivot) l+=1;
//如果 l == r,必须l++,r--,否则出现栈溢出
if (l == r)
l += 1;
r -= 1;
//向左递归
if(leftIndex < r) quickSort(arr,leftIndex,r);
//向右递归
if (rightIndex > l) quickSort(arr,l,rightIndex);
以上是关于Day565.快速排序 -数据结构和算法Java的主要内容,如果未能解决你的问题,请参考以下文章