荷兰国旗问题与快速排序

news2024/11/24 14:44:31

实现:

当arr[i]小于等于num时,arr[i]和小于等于num区域下一个数进行交换,小于等于区域右扩一个位置,指针 i 指向下一个

当arr[i]大于num时,指针 i 指向下一个

指针 i 越界时完成

升级版本:将小于、等于、大于三个区域分开

实现:

当arr[i]小于num,arr[i]和小于区域下一个数进行交换,小于区域右扩,指针 i 指向下一个

当arr[i]等于num,指针 i 指向下一个

当arr[i]大于num,arr[i]和大于去与前一个进行交换,大于区域左扩,指针 i 不变

等于区域与大于区域相遇时完成

 

快速排序1.0

在数组中,将最后一位数作num,除却最后一位数的数组实现小于等于num区域和大于num区域划分,将num与小于等于num区域的后一位数交换,此时num这个数排序完成

num这个数为分界点,左侧和右侧的数组重复进行此操作

快速排序2.0   

一次搞定一批数

在数组中,将最后一位数作num,除却最后一位数的数组实现小于num区域,等于num区域和大于num区域划分,将num与等于num区域的后一位数交换,此时num这个数排序完成

以等于num区域为分界点,左侧和右侧的数组重复进行此操作

快速排序的不稳定性

快排的时间复杂度取决于取到的num的值在数组中的大小;

如果num取的数极大或极小时,排序的时间复杂度趋向于O(N^2)

如果num取的数较为中间,排序的时间复杂度趋向于O(NlogN)

快速排序3.0

随机选一个数,与最后一个数进行交换,取这个数作为num

此时取到的num的值为概率事件,排序的时间复杂度也为概率事件

最终代码

package algorithm;

import org.junit.Test;

public class QuickSort {
    @Test
    public void test() {
        int[] arr = new int[]{2, 1};
        quickSort(arr);
        for (int i:arr) {
            System.out.println(i);
        }
    }

    public static void quickSort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        quickSort(arr, 0, arr.length - 1);
    }

    //arr[L]到arr[R]区域排序
    public static void quickSort(int[] arr, int L, int R) {
        if (L < R) {
            swap(arr, (int) (L + Math.random() * (R - L + 1)), R);//随机一个数和最后一个数进行交换, 作为num
            int[] p = partiion(arr, L, R);//获取等于num区域
            quickSort(arr, L, p[0] - 1);//小于区域
            quickSort(arr, p[1] + 1, R);//大于区域
        }
    }

    //num = arr[R]
    public static int[] partiion(int[] arr, int L, int R) {
        int less = L - 1;//小于区域右边界
        int more = R;//大于区域左边界
        while (L < more) { //L表示当前位置, 为什么是L呢,因为i也是从数组开头走的
            if (arr[L] < arr[R]) {//当前的数小于num
                swap(arr, ++less, L++);//less后一个数和arr[L]交换,指针L右移一位
            } else if (arr[L] > arr[R]) {
                swap(arr, --more, L);//more前一个数和arr[L]交换,指针L不变
            } else {
                L++;
            }
        }
        swap(arr, more, R);//num和大于区域左边界,等于区域的后一位数交换
        return new int[]{less + 1, more};//输出等于num区域
    }

    public static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

存在comsumer group且存在消费行为,但AdminClient获取不到消费offset值

AdminClient 中的listConsumerGroupOffsets获取不到consumergroup; 网上查找资料说&#xff1a; listConsumerGroupOffsets() 请求返回的消费位移信息未及时更新,仍是稍早时刻的状态。 由于 listConsumerGroupOffsets() 请求需要从 Broker 获取最新的位移信息,如果响应结果的更…

ABAP SAT使用说明

SAT简介 SAT是SAP提供的用来替代SE30的程序性能优化分析工具( runtime analysis)&#xff0c;功能比SE30更加强大。 创建SAT变式-设置SAT运行属性&#xff0c;默认为default&#xff0c;可以参照创建一个自己的变式。 SAT变式说明 Size Limits&#xff1a; 设置文件最大容量…

【LeetCode: 279. 完全平方数 | 暴力递归=>记忆化搜索=>动态规划 | 背包模型】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Goby 漏洞更新 |商混ERP系统 DictionaryEdit.aspx 页面存在SQL注入

漏洞名称&#xff1a;商混ERP系统 DictionaryEdit.aspx 页面存在SQL注入 English Name&#xff1a;SQL injection exists on Lotus ERP DictionaryEdit.aspx pag CVSS core: 8.5 影响资产数&#xff1a;616 漏洞描述&#xff1a; 杭州荷花软件有限公司开发的商混ERP系统。…

开发板和虚拟机socket报错“connect error: No route to host”

学习socket编程时&#xff0c;将服务器程序运行在开发板上&#xff0c;将客户端应用程序运行在 虚拟机Ubuntu16.04 系统&#xff0c;服务器可以正常开启&#xff0c; 但客户端连接时&#xff0c; 报错“connect error: No route to host” 1、网上大多是以下情况&#xff1a; …

易智编译EaseEditing:计算机顶会不一定比SCI期刊更权威!

计算机SCI期刊和学术会议都是评估学术研究水平和影响力的重要指标&#xff0c;但在不同领域、不同学科、不同评价指标下可能会有不同的权威性。 在计算机科学领域&#xff0c;传统上认为顶级学术会议的影响力和权威性更高。 因为计算机科学发展较快&#xff0c;研究领域广泛&a…

【Linux】8. 环境变量

1. 环境变量的引入 先描述一个现象&#xff0c;我们在执行二进制可执行程序的时候&#xff0c;是需要找到其所在位置的(程序要运行必须先加载到内存&#xff0c;是因为冯诺依曼体系结构规定CPU只能从内存中读取数据)&#xff0c;所以这也就是为什么我们在运行前带上./的原因&a…

洛谷P5717-三角形分类

洛谷P5717-三角形分类 题目 这道题更像是初中题&#xff0c;但是怎么能完整的按照题目的意思来解决呢&#xff0c;说实话这个题卡了我有一会儿&#xff0c;要做一次性做出这个题&#xff0c;我觉得需要搞清楚if-if 和if-else if-else if&#xff0c;试想这两个的区别是什么&am…

ChatGPT有意识吗?

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ChatGPT是一个计算机程序&#xff0c;它没有意识。它只是根据预设的算法和规则来处理输入和输出。虽然它可以模拟人类的对话&#xff0c;但它没有自己的思想或感觉。它只是根据程序设…

ROS 下 激光扫描仪 YDLidar-G4 使用

环境配置&#xff1a; ubuntu20.04 LTS ROS noetic 编程工具&#xff1a;vs code&#xff0c;远程通过ssh访问 扫描仪&#xff1a;YDLidar-G4 YDLidar驱动&#xff1a; YDLidar SDK YDLidar ROS 功能包 1 . YDLidar-SDK通信协议 雷达扫描输出的数据以十六进制格式输出到通信…

Linux文本之sed流编辑器

一、sed的相关知识及其工作流程 1&#xff09;sed编辑器的介绍 sed是一种流编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff08;pattern space&#xff09;&#xff0c;接着用sed命令处理缓…

使用HDFS底层文件进行HBase跨集群数据迁移

目录 一、概述 二、环境信息 三、HBCK2下载和编译 四、具体操作步骤 4.1 数据同步 4.2 添加元数据 4.3 重新分配region 一、概述 客户集群机房迁移&#xff0c;我们部署的集群也要完成跨集群迁移hbase 表&#xff0c;这里选择迁移Hadoop底层数据来实现hbase的表迁移。 …

Plant Simulation 模型保存历史记录

Plant Simulation 建模是一个长时间的过程&#xff0c;所以做好模型保存历史记录很重要&#xff0c;这次分享一个OOTB&#xff08;开盒即用/系统自带&#xff09;的记录保存历史记录的功能。 文中截图于 Plant Simulation 16.0.5 目录 1.功能设置与说明2.使用场景3.总结 1.功能…

Selenium自动化测试中的PageObject模式

PageObject模式简介 众所周知&#xff0c;UI页面元素常常是不稳定的&#xff0c;在使用Selenium编写WebUI自动化测试用例时&#xff0c;随着测试脚本的增加&#xff0c;维护和更新这些元素便成为一个令人头疼的问题。 在普通模式下&#xff0c;脚本直接定位并操作元素&#xf…

链表中的经典问题

一、反转链表 反转一个单链表:一种解决方案是按原始顺序迭代结点&#xff0c;并将它们逐个移动到列表的头部。 方法1:迭代 C struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev NULL;struct ListNode* curr head;while (curr) {struct ListN…

字节跳动软件测试面试记:二面被按地上血虐,所幸Offer已到手

在互联网做了几年之后&#xff0c;去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好&#xff0c;更重要的是&#xff0c;它是对你专业能力的背书&#xff0c;大厂工作背景多少会给你的简历增加几分竞争力。 但说实话&#xff0c;想进大厂还真没那么容易。最近面试字…

Linux中与“系统网络状态”相关的内核数据结构

六、系统网络状态相关的数据结构 6.1 ifconf \linux-2.6.32.63\include\linux\if.h /* Structure used in SIOCGIFCONF request. Used to retrieve interfaceconfiguration for machine (useful for programs which must know allnetworks accessible). */ struct ifcon…

腾讯云与中电金信发布联合核心方案

5月11日&#xff0c;以“聚力革新&#xff0c;行稳致远”为主题的 “腾讯金融云国产化战略峰会”在北京举办&#xff0c;来自金融业、科技侧、研究机构的专家学者同聚一堂&#xff0c;共同探讨银行核心下移方法论以及国产化转型实践等话题。会议期间&#xff0c;中电金信副总经…

Java面试(2)数据类型

数据类型 1. Java有哪些数据类型 Java基本数据类型 这八种基本类型都有对应的包装类分别为&#xff1a;Byte、Short、Integer、Long、Float、Double、Character、Boolean 。 引用数据类型 引用数据类型非常多&#xff0c;大致包括&#xff1a;类、 接口类型、 数组类型、 枚…

AI低代码平台遍地开花,AI对于低代码到底是帮手还是对手?

AI对于低代码平台到底是帮手还是对手&#xff1f; 近日&#xff0c;CSDN举办的新程序员大会中&#xff0c;对于AI在代码领域的能力进行了5个层级的定义。并且进行了大量的测试&#xff0c;发现当下的AI已经可以去到初级程序员了&#xff0c;而更为强大的GPT-4的代码能力甚至还有…