快排Java

news/2024/9/17 3:58:56 标签: java, 开发语言

快速排序的复杂度

在这里插入图片描述

快排代码

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 + " ");
        }
    }
}

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

即代码

java">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.niftyadmin.cn/n/5645484.html

相关文章

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列&#xff1a;RabbitMQ与Kafka的集成与应用 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代的分布式系统中&#xff0c;消息队列是实现系统间通信、解耦和提高可扩展性的重要…

Linux 移动(mv)、重名名(rename)目录和文件及长内容的文件查看方式详解

linux中的移动使用mv指令 移动文件 单纯地移动某一个文件直接使用:mv <源文件名称/地址> <新文件名称/地址>, 可以看出,这个方法也可以用来修改文件的名称。 移动文件夹(目录)下的内容 如要移动某个文件夹下的 某个内容:mv <目录地址1/xxx> <目…

机械学习—零基础学习日志(概率论总笔记5)

引言——“黑天鹅” 要获得95%以上置信度的统计结果&#xff0c;需要被统计的对象出现上千次&#xff0c;但是如果整个样本只有几千字&#xff0c;被统计的对象能出现几次就不错了。这样得到的数据可能和真实的概率相差很远。怎么避免“黑天鹅”&#xff1f; 古德-图灵折扣估…

C语言:刷题日志(1)

一.阶乘计算升级版 本题要求实现一个打印非负整数阶乘的函数。 其中n是用户传入的参数&#xff0c;其值不超过1000。如果n是非负整数&#xff0c;则该函数必须在一行中打印出n!的值&#xff0c;否则打印“Invalid input”。 首先&#xff0c;知道阶乘是所有小于及等于该数的…

验证linux gpu是否可用

通过torch验证 import torchprint(torch.__version__) # 查看torch当前版本号 print(torch.version.cuda) # 编译当前版本的torch使用的cuda版本号 print(torch.cuda.is_available()) # 查看当前cuda是否可用于当前版本的Torch&#xff0c;如果输出True&#xff0c;则表示可…

全网首发!!!opencv三通道Mat点云转halcon点云—HTuple类型

OpenCV三通道Mat点云转Halcon点云—HTuple类型的难点 在将OpenCV中的三通道Mat&#xff08;通常用于存储图像数据&#xff0c;包括RGB三通道&#xff09;转换为Halcon中的点云数据时&#xff0c;并直接转换为Halcon特有的HTuple类型&#xff08;HTuple是Halcon中用于存储和处理…

2024 年高教社杯全国大学生数学建模竞赛题目——D 题 反潜航空深弹命中概率问题的求解

2024 年高教社杯全国大学生数学建模竞赛题目 &#xff08;请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”&#xff09; D 题 反潜航空深弹命中概率问题 应用深水炸弹&#xff08;简称深弹&#xff09;反潜&#xff0c;曾是二战时期反潜的重要手段&#xff0c;而随着现代军…

【数据结构与算法】——学习笔记

学习数据结构与算法的第一天 文章目录 前言第一部分 语言基础基础数组数组的定义数组的声明初始化动态&#xff1a;int[] arr new int[5];遍历数组java.util.Arrays类 List&#xff08;链表&#xff09;List集合实例化步骤&#xff1a; 常用方法List集合特点 排序数组排序集合…