日撸 Java 三百行day46

news2024/11/16 9:33:24

文章目录

  • 说明
  • day46 快速排序
    • 1.基本思路
    • 2. 代码

说明

闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客
自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/sampledata

day46 快速排序

1.基本思路

快速排序需要一个基准值,在这个基准值右边的数都比这个基准值,左边的数都比这个基准值。一趟排序就可以确定一个数的最终位置
大致步骤如下:

  • 选择基准值,一般选择数组第一个元素或者最后一个。
  • 从右往左扫描数组,如果找到一个比基准值小的元素,则停止。
  • 从左往右扫描数组,如果找到一个比基准值大的元素,则停止。
  • 交换位置
  • 重复上面的步骤 直到low和high相遇,这是low和high所在位置就是基准元素的最后位置
    递归地对左半部分和右半部分进行快速排序(以下是根据代码思想模拟的一次快速排序结果)
    在这里插入图片描述

2. 代码

  • 快速排序,会在左右两边各设置一个指针low和hight,代码中基准值找的是最右边的数据,当tempLeft遇到比基准值小的就++,否则就会停下来;tempRight遇到比基准值大的就–,否则就会停下;然后交换位置;直到tempLeft和tempRight相遇
  • 每一趟排序后就会有基准值的左右两边,对左右两边又进行同样的快速排序操作操作,所以这个是有递归思想在里面的,用递归算法解决。
 /**
     * Quick sort recursively.
     * @param paraStart The start index.
     * @param paraEnd The end index
     */
    public void quickSortRecursive(int paraStart, int paraEnd) {
        if (paraStart >= paraEnd) {
            return;
        }
        int tempPivot = data[paraEnd].key;
        DataNode tempNodeForSwap;

        int tempLeft = paraStart;
        int tempRight = paraEnd;

        //find the position for the pivot. at the same time move smaller elements to the left and bigger one to the right
        while (true) {
            while ((data[tempLeft].key < tempPivot) && tempLeft < tempRight) {
                tempLeft++;
            }
            while ((data[tempRight].key) > tempPivot && tempLeft < tempRight) {
                tempRight--;
            }

            if (tempLeft < tempRight) {
                //swap
                System.out.println("Swapping " + tempLeft + " and " + tempRight);
                tempNodeForSwap = data[tempLeft];
                data[tempLeft] = data[tempRight];
                data[tempRight] = tempNodeForSwap;
            }else {
                break;
            }

            System.out.print("From " + paraStart + " to " + paraEnd + ": ");
            System.out.println(this);
            quickSortRecursive(paraStart, tempLeft - 1);
            quickSortRecursive(tempLeft + 1, paraEnd);
        }
    }

    public void quickSort() {
        quickSortRecursive(0, length-1);
    }

    /**
     * Test the method.
     */
    public static void quickSortTest() {
        int[] tempUnsortedKeys = { 1, 3, 12, 10, 5, 7, 9 };
        String[] tempContents = { "if", "then", "else", "switch", "case", "for", "while" };
        DataArray tempDataArray = new DataArray(tempUnsortedKeys, tempContents);

        System.out.println(tempDataArray);

        tempDataArray.quickSort();
        System.out.println("Result\r\n" + tempDataArray);
    }

在这里插入图片描述

对比昨天学习的冒泡排序,冒泡排序是从一边开始,并且交换的是相邻两个元素,他也会确定一个最终位置,但是这个最终位置是从下到上依次确定(或从上到下),而快速排序,他也是交换数据,但是他是两边同时开始比较,每次也会确定一个数的最终位置,但是这个位置并不是有规律的,需要结合排序的数据来看,相比冒泡,快速排序的基准值要选好才是关键。

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

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

相关文章

计算机网络安全--期末

计算机网络安全绪论 计算机网络实体是什么 计算机网络中的关键设备&#xff0c;包括各类计算机、网络和通讯设备、存储数据的媒体、传输路线…等 典型的安全威胁有哪些 ★ ⋆ \bigstar\star ★⋆ 窃听(敏感信息被窃听)重传(被获取在传过来)伪造(伪造信息发送&#xff09;篡…

kubeadm 部署Kubernetes 集群一主多从集群并完成pod部署

目录 搭建环境准备三台虚拟机&#xff1a; 环境条件限制&#xff1a; 一&#xff0c;关闭交换分区 二&#xff0c;禁用selinux 三&#xff0c;防火墙关闭 四&#xff0c;docker安装 五&#xff0c;设置IPv4 流量传递到 iptables 六&#xff0c;配置k8s的yum源 七&#…

vue3学习三 computed

vue3中的computed 也被封装成了一个组合api , 所以我们使用的时候&#xff0c; 要 import {computed} from “vue” 和vue2样&#xff0c; computed 是有两种书写方式 简写方式和全写方式 <template><div> firstname:<input v-model"firstname" /&g…

【专题连载】基于5G+机器视觉的芯片检测解决方案

基于5G机器视觉的芯片检测解决方案 背景 机器视觉的价值体现在它能为工业生产带来产量的增加和产品质量的提升&#xff0c;并同时降低生产成本&#xff0c;推动了工业生产的快速发展&#xff0c;使工业生产企业真正从中受益。为了进一步压缩生产成本&#xff0c;工业控制的产…

信号与槽机制一

一、信号与槽 1、什么是信号与槽&#xff1f; 信号和槽是用于对象之间的通信&#xff0c;它是Qt的核心机制&#xff0c;在Qt编程中有着广泛的应用。如果想学好Qt&#xff0c;一定要充分掌握信号的槽的概念与使用。 2、信号和槽的代码实例 在Qt中&#xff0c;发送对象、发送的信…

FPGA上的视觉 SLAM

在FPGA开发板上实现基于立体视觉的 SLAM。 绪论 SLAM&#xff08;同步定位和地图绘制&#xff09;在自动驾驶、AGV 和无人机等各种应用中引起了人们的广泛关注。尽管目前有很多优秀的 SLAM 项目可以参考&#xff0c;但是他们的复杂性&#xff08;高性能&#xff09;及依赖性&am…

体验洞察 | 原来它才是最受欢迎的CX指标?

一直以来&#xff0c;企业都在试图追踪他们能否在整个客户旅程中始终如一地提供卓越的客户体验&#xff08;Customer Experience&#xff0c;简称“CX”&#xff09;&#xff0c;并通过多个CX指标&#xff0c;如NPS&#xff08;净推荐值&#xff09;、CSAT&#xff08;客户满意…

简单讲讲UE中的PlayerCameraManager

我们在平时开发中&#xff0c;少不了编写一些逻辑去控制相机&#xff0c;例如俯视角镜头与各个特写镜头的过渡切换&#xff0c;因此了解一些PlayerCameraManager是有必要的。 PlayerCameraManager是UE自带的相机管理组件&#xff0c;本身比较简单&#xff0c;一般需要自行扩展…

长短期记忆网络LSTM(long short-term memory)

递归神经网络 递归神经网络可以解决这个问题。它们是带有循环的神经网络&#xff0c;允许信息保留一段时间。 在上图中&#xff0c;A 代表神经网络主体, xt 是网络输入&#xff0c;ht是网络输出&#xff0c;循环结构允许信息从当前输出传递到下一次的网络输入。 一个递归神经网…

强烈推荐:一款中文AI问答、创作、绘画工具

前言 相信很多人已经听过ChatGPT这款人工智能机器人了&#xff0c;它能够根据用户输入的内容&#xff0c;自动生成智能回复。它使用自然语言处理技术&#xff0c;通过学习大量的文本资料&#xff0c;能够模拟人类的对话行为。它是由OpenAI开发的&#xff0c;一家非常伟大的人工…

6个月的测试,来面试居然要15K,我一问连5K都不值

2023年4月份我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个自动化测试&#xff0c;公司的测试人员就只有2个开发3个前端1个测试还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&…

HNU-计算机系统-讨论课6

完整讲解视频&#xff1a;野生Gprof会梦见存储器山嘛&#xff1f;_哔哩哔哩_bilibili 别忘了一键三连哦 题 3&#xff1a; 在“存储器层次结构”一章的 6.6 节从存储器山的角度具象化 了存储器性能描述。 &#xff08; 1 &#xff09; 请阅读教材 6.6.1 内容&#xff08…

从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台|新版本揭秘

日志数据的处理与分析是最典型的大数据分析场景之一&#xff0c;过去业内以 Elasticsearch 和 Grafana Loki 为代表的两类架构难以同时兼顾高吞吐实时写入、低成本海量存储、实时文本检索的需求。Apache Doris 借鉴了信息检索的核心技术&#xff0c;在存储引擎上实现了面向 AP …

京东金融Android瘦身探索与实践

作者&#xff1a;京东科技 冯建华 一、背景 随着业务不断迭代更新&#xff0c;App的大小也在快速增加&#xff0c;2019年~2022年期间一度超过了117M&#xff0c;期间我们也做了部分优化如图1红色部分所示&#xff0c;但在做优化的同时面临着新的增量代码&#xff0c;包体积一直…

openEuler 社区 2023 年 4 月运作报告

概述 过去一个月&#xff0c;openEuler社区全员参与openEuler Developer Day 2023&#xff0c;通过SIG组开放工作会议完成了下个版本的规划。openEuler社区也参加了在新加坡举办的FOSSASIA SUMMIT。 在技术层面&#xff0c;社区不断推进创新&#xff0c;发布新项目&#xff0…

动态规划--01背包问题

01背包问题 背包问题题目最优解结构性质状态转移方程方程理解 递归实现核心思想代码实现用例测试 画表非递归实现核心思路代码实现画表展示 计算哪些物品放入算法思想代码实现 背包问题 题目 0-1背包问题:给定n种物品和一背包。物品的重量是w;,其价值为v; ,背包的容量为C。问…

科普文:国内ChatGPT怎么用,ChatGPT国内怎么用,关于ChatGPT你需要了解的内容应该都在这

在国内用了很长一段时间的ChatGPT&#xff0c;每次跟小白&#xff0c;哪怕是用ChatGPT的人交流的时候&#xff0c;都感觉解释不清&#xff0c;正好今天周末&#xff0c;给大家整理一篇关于ChatGPT的科普文&#xff0c;想要了解或使用ChatGPT的人&#xff0c;一定要看~~~&#x…

html实现经典赛车小游戏

文章目录 1.设计来源1.1 主界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/130580123 html实现经典赛车小游戏源码 html实现经典赛车小游戏源码&#xff0c;1.通过键盘…

如何让flex布局中的一个子元素单独右侧对齐

flex布局中的一个子元素单独右侧对齐 在 Flex布局中&#xff0c;我们经常需要对子元素进行对齐操作。使用 justify-content 和 align-items 可以轻松地对所有子元素进行对齐&#xff0c;但是当我们需要对某个子元素进行单独的对齐时&#xff0c;我们应该怎么做呢&#xff1f; …

【涨知识】PCB板为什么多是绿色的?

拿到一块PCB板时&#xff0c;最直观看到板子上油墨的颜色&#xff0c;就是我们一般指的PCB板颜色。PCB板的颜色多种多样&#xff0c;包括绿色、蓝色、红色和黑色等。 其中&#xff0c;绿色是最常用的&#xff0c;更为大家所熟悉。但为什么PCB板多是绿色呢? 当中缘由&#xff…