当前位置: 首页 > article >正文

快排Java

快速排序的复杂度

在这里插入图片描述

快排代码

package leetcode;

import java.util.Arrays;

public class QuickSort {
    public static void quickSort(int[] array, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(array, low, high);
            quickSort(array, low, pivotIndex - 1);  // 递归排序左子数组
            quickSort(array, pivotIndex + 1, high); // 递归排序右子数组
        }
    }

    private static int partition(int[] array, int low, int high) {
        int pivot = array[high]; // 选择最后一个元素作为基准
       // high = high;
        while (low < high){
            while(low<high && array[low] <= pivot){
                low++;
            }
            array[high] = array[low];
            while(low<high && array[high] >= pivot){
                high--;
            }
            array[low] = array[high];
        }
        array[low] = pivot;

        return low;
    }

    public static void main(String[] args) {
        int[] arr = {4, 1};
        int n = arr.length;
        quickSort(arr, 0, n - 1);

        System.out.println("Sorted array: ");
        for (int value : arr) {
            System.out.print(value + " ");
        }
    }
}

对于每一次分区调整,上边的代码有点小问题,但是不影响正确性,

即代码

private static int partition(int[] array, int low, int high) {
        int pivot = array[high]; // 选择最后一个元素作为基准
       //也就说,一开始最右边的是相当于空着的
       //所以一开始要先找左边大于基准的,可以放到high空着的地方
        while (low < high){
            while(low<high && array[low] <= pivot){
                low++;
            }
            array[high] = array[low];//相当于现在low这个位置空着
            //所以需要再从右边找一个比基准小的
            // 但是每一次都会重复判断high
   
            while(low<high && array[high] >= pivot){
                high--;
            }
            array[low] = array[high];
        }
        array[low] = pivot;

        return low;
    }

array[high] = array[low];
while(low<high && array[high] >= pivot){
high–;
}
每一次都会重复判断high,因为上一行代码 array[high] = array[low];
所以array[high] >= pivot 一定成立,我就感觉多了一次判断。
array[high] >= pivot


http://www.kler.cn/news/294727.html

相关文章:

  • 多线程篇(ThreadLocal 内存模型 伪共享(伪共享))(持续更新迭代)
  • TCP远程命令执行
  • LLM agentic模式之multi-agent: ChatDev,MetaGPT, AutoGen思路
  • 人工智能 | Mistral 大语言模型
  • 【Zookeeper】小白基础入门
  • 关于vue项目启动报错Error: error:0308010C:digital envelope routines::unsupported
  • 828华为云征文|华为云服务器Flexus X搭建悟空crm管理系统——助力企业云上管理(解决APP Referer校验失败问题)
  • WildCard平台:揭秘ChatGPT畅享版、Claude畅享版及全能畅享套餐
  • JS中【JSON】知识点总结和常用方法分析
  • 活动|华院计算宣晓华受邀出席“AI引领新工业革命”大会,探讨全球科技的最新趋势
  • zhidianyun01/基于基于 ThinkPHP+Mysql 灵活用工平台源码
  • Redis、memcache、MongoDB 对比
  • Java 数据类型
  • SAP Business One 与无锡哲讯:携手共创企业数字化未来
  • 7-8月月报 | Apache SeaTunnel社区进展一览
  • HTML 列表
  • 2024国赛数学建模-模拟火算法(MATLAB 实现)
  • WebShell流量特征检测_蚁剑篇
  • axure动态面板
  • 力扣刷题--442. 数组中重复的数据【中等】
  • 指针与函数(三)
  • 1-9 图像膨胀 opencv树莓派4B 入门系列笔记
  • 关键字volatile有什么含意?
  • Java线程池和Executor框架-面试与分析
  • Wimdows使用Appium IOS自动化
  • 行为型设计模式-责任链(chain of responsibility)模式-python实现
  • 第十六篇:走入计算机网络的传输层--传输层概述
  • 【Qt线程】—— Qt线程详解
  • 2024年水利水电安全员考试题库及答案
  • Linux C 内核编程 /proc 编程例子