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的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ day8

NOIP 2013 day1

day⑤:冒泡排序

Day2: 冒泡排序

RGB565 怎么转 RGB888

冒泡排序 Day07