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

一、简单排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、Comparable接口介绍

1.描述

2.Comparable使用

 二、冒泡排序

1.排序原理

2.冒泡排序实现

2.1 冒泡排序API

2.2 冒泡排序实现

3.冒泡排序时间复杂度

三、选择排序

1.排序原理

2.选择排序实现

2.1 选择排序API

2.2 选择排序实现

3.选择排序时间复杂度

四、插入排序

1.排序原理

2.插入排序实现

2.1 插入排序API

2.2 插入排序实现

3.插入排序时间复杂度

总结


前言

提示:这里可以添加本文要记录的大概内容:

自学JAVA数据结构笔记,跟学视频为:黑马程序员Java数据结构与java算法全套教程,数据结构+算法教程全资料发布,包含154张java数据结构图_哔哩哔哩_bilibili


一、Comparable接口介绍

1.描述

JAVA提供了一个用来定义排序规则的接口Comparable

2.Comparable使用

需求:

1.定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则;

2.定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试

代码:

学生类:

package ComparableTest;//学生类
public class Student implements Comparable<Student>{private String name;private int age;public Student(String name,int age){this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"username='" + name + '\'' +", age=" + age +'}';}//重写接口内部方法@Overridepublic int compareTo(Student o) {return this.getAge() - o.getAge();}}

测试类:

package ComparableTest;public class Test {public static void main(String[] args) {//创建对象Student s1 = new Student("张三",18);Student s2 = new Student("李四",20);Comparable max = getMAx(s1,s2);System.out.println(max);}//比较public static Comparable getMAx(Comparable c1,Comparable c2){int result = c1.compareTo(c2);if(result >= 0){return c1;}else{return c2;}}}

注:

在输出Compar类型数据时,需要重写toString()方法 

 二、冒泡排序

1.排序原理

1.比较相邻的元素,如果前一位数比当前数大,则交换这两个元素

2.对每一对元素执行1操作,直到最后一对元素

2.冒泡排序实现

2.1 冒泡排序API

类名 :        Bubble

构造方法 : Bubble():创建Bubble对象

成员方法 :1.public static void sort(Comparable[] a):对数组内的元素进行排序

                    2.private static boolean greater(Comparable v,Comparable w):判断v是否大于w                     3.private static void exch(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值

2.2 冒泡排序实现

排序类:

package sort;public class Bubble {//对数组内的元素进行排序public static void sort(Comparable[] nums){for(int i = 0;i < nums.length - 1;i ++){for(int j = 0;j < nums.length - 1 - i;j ++){//如果当前元素比后一个元素大,则交换两个元素if(greater(nums[j],nums[j + 1])){exch(nums,j,j + 1);}}}}//判断v是否大于wprivate static boolean greater(Comparable v,Comparable w){return v.compareTo(w) > 0;}//交换private static void exch(Comparable[] nums,int i,int j){Comparable temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

测试类:

package sort;import java.util.Arrays;public class BubbleTest {public static void main(String[] args) {Integer[] nums = {3,6,7,9,0,1,4,2,5,8};Bubble.sort(nums);System.out.println(Arrays.toString(nums));}}

3.冒泡排序时间复杂度

 冒泡排序使用了双层for循环,其中内层循环的循环体是真正完成排序的代码,其时间复杂度为:O(N^2).

三、选择排序

1.排序原理

1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引

2.交换第一个索引处和最小值所在的索引处的值

2.选择排序实现

2.1 选择排序API

类名 :        Selection

构造方法 : Selection():创建Selection对象

成员方法 : 1.public static void sort(Comparable[] a):对数组内的元素进行排序                                        2.private static boolean greater(Comparable v,Comparable w):判断v是否大于w                     3.private static void exch(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值

2.2 选择排序实现

排序类:

package sort;public class Selection {public static void sort(Comparable[] nums){for(int i = 0;i < nums.length - 1;i ++){//假定最小值索引int minIndex = i;//假定第一个元素i处的值为最小值,则将i+1之后的元素与i处的比较,并找出最小值for(int j = i + 1;j < nums.length;j ++){if(greater(nums[minIndex],nums[j])){//如果minIndex处的值比j的大,则更新最小值minIndex = j;}}//在第一次遍历结束之后,并找出最小值,则交换i处与最小值元素exch(nums,i,minIndex);}}//判断v是否大于wprivate static boolean greater(Comparable v,Comparable w){return v.compareTo(w) > 0;}//交换private static void exch(Comparable[] nums,int i,int j){Comparable temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}

测试类:

package sort;import java.util.Arrays;public class SelectionTest {public static void main(String[] args) {Integer[] nums = {3,6,7,9,0,1,4,2,5,8};Selection.sort(nums);System.out.println(Arrays.toString(nums));}}

3.选择排序时间复杂度

选择排序使用了双层for循环,其中外层循环完成了数据交换,内层循环完成了数据比较,其时间复杂度为O(N^2);

四、插入排序

1.排序原理

1.把所有的元素分为两组,已经排序的和未排序的;

2.找到未排序的组中的第一个元素,向已经排序的组中进行插入;

3.倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位;

2.插入排序实现

2.1 插入排序API

类名:         Insertion

构造方法: Insertion():创建Insertion对象

成员方法: 1.public static void sort(Comparable[] a):对数组内的元素进行排序

                   2.private static boolean greater(Comparable v,Comparable w):判断v是否大于w                    3.private static void exch(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值

2.2 插入排序实现

排序类:

package sort;public class Insertion {public static void sort(Comparable[] nums){for(int i = 1;i < nums.length;i ++){//当前元素为a[i],依次和i前面的元素比较,找到一个小于等于a[i]的元素for(int j = i;j > 0;j --){if(greater(nums[j - 1],nums[j])){exch(nums,j - 1,j);}else{break;}}}}//判断v是否大于wprivate static boolean greater(Comparable v,Comparable w){return v.compareTo(w) > 0;}//交换private static void exch(Comparable[] nums,int i,int j){Comparable temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}

测试类:

package sort;import java.util.Arrays;public class InsertionTest {public static void main(String[] args) {Integer[] nums = {3,6,7,9,0,1,4,2,5,8};Insertion.sort(nums);System.out.println(Arrays.toString(nums));}}

3.插入排序时间复杂度

插入排序使用了双层for循环,其中内层循环的循环体是真正完成排序的代码,其时间复杂度为:O(N^2)

总结

提示:这里对文章进行总结:
 

相关文章:

一、简单排序

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Comparable接口介绍 1.描述 2.Comparable使用 二、冒泡排序 1.排序原理 2.冒泡排序实现 2.1 冒泡排序API 2.2 冒泡排序实现 3.冒泡排序时间复杂度 三…...

慢SQL出现原因、优化、开启慢查询日志

文章目录慢SQL:出现原因&#xff1a;解决方式&#xff1a;开启慢查询日志&#xff1a;慢SQL: 出现原因&#xff1a; &#xff08;1&#xff09;数据库表索引设置不合理 &#xff08;2&#xff09;SQL语句有问题&#xff0c;需要优化 解决方式&#xff1a; &#xff08;1&am…...

要理解网络,其实不就是理解这三张表吗

我们如果要理解数据是如果在网络世界中穿梭的&#xff0c;那其实只要了解其中的三张表就可以了。这三张表分别为路由表、转发表、ARP 表。 假设我们用聊天工具聊天的时候&#xff0c;我在北京&#xff0c;你在广东&#xff0c;当我给你发送一条消息的时候。搭载这这条消息的数据…...

Java异常架构与异常关键字

Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离&#xff0c;保证程序代码更加优雅&#xff0c;并提高程序健壮性。在有效使用异常的情况下&#xff0c;异常能清晰的回答what, where, why这3个问…...

【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning

1. Motivation 针对机器学习中的出现的数据隐私泄露的风险&#xff0c;提出了线性回归、逻辑回归以及简单神经网络的隐私保护模型。 2. Contributions 2.1 为线性回归、逻辑回归以及神经网络设计安全计算协议 2.1.1.1 线性回归 线性回归损失函数为&#xff1a; , 采用SG…...

【2023美赛】C题Wordle预测27页中文论文及Python代码详解

【2023美赛】C题Wordle预测27页中文论文及Python详解 相关链接 &#xff08;1&#xff09;2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 &#xff08;2&#xff09;2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 &#xff08;3&#xff09;2023年美赛C题…...

【C++修行之路】STL——模拟实现string类

文章目录前言类框架构造与析构c_str迭代器操作符重载[]&#xff1a;&#xff1a;> > < < !:reverse与resizereverseresizepush_back与append复用实现insert和erasec_str与流插入、流提取eraseswap(s1,s2)与s1.swap(s2)结语前言 这次我们分几个部分来实现string类…...

CorelDRAW2023最新版序列号使用教程

CorelDRAW2023用起来非常顺手&#xff0c;旨在为用户解决因在工作上带来的问题&#xff0c;在业内可谓享有极高的声誉&#xff0c;是业内人士常用的一款工具&#xff0c;有了它&#xff0c;可以更好的帮助用户把握好各个方面的细节&#xff0c;减少其他方面的失误&#xff0c;让…...

【一天一门编程语言】Python 语言程序设计极简教程

文章目录 Python 语言程序设计极简教程一、Python语言简介1.1 Python的优势1.2 Python的应用二、Python基础语法2.1 Python基础2.1.1 注释2.1.2 变量2.1.3 运算符2.1.4 控制流2.1.5 函数2.2 Python数据类型2.2.1 数字2.2.2 字符串2.2.3 列表2.2.4 元组2.2.4.1 元组的基本操作创…...

14、KL散度

KL 散度&#xff0c;是一个用来衡量两个概率分布的相似性的一个度量指标。 现实世界里的任何观察都可以看成表示成信息和数据&#xff0c;一般来说&#xff0c;我们无法获取数据的总体&#xff0c;我们只能拿到数据的部分样本&#xff0c;根据数据的部分样本&#xff0c;我们会…...

TypeError: load() missing 1 required positional argument: ‘Loader‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

【设计模式】 观察者模式介绍及C代码实现

【设计模式】 观察者模式介绍及C代码实现 背景 在软件构建过程中&#xff0c;我们需要为某些对象建立一种“通知依赖关系”&#xff0c;即一个对象&#xff08;目标对象&#xff09;的状态发生改变&#xff0c;所有的依赖对象&#xff08;观察者对象&#xff09;都将得到通知。…...

01-Maven基础-简介安装、基本使用(命令)、IDEA配置、(写jar,刷新自动下载)、依赖管理

文章目录0、Maven1、Maven 简介2、Maven 安装配置安装配置步骤3、Maven 基本使用Maven 常用命令Maven 生命周期IDEA 配置 MavenMaven 坐标详解IDEA 创建 Maven 项目IDEA 导入 Maven 项目配置 Maven-Helper 插件 (非常实用的小插件)依赖管理使用坐标导入 jar 包依赖范围0、Maven…...

一、前端稳定性规约该如何制定

前言 稳定性是数学或工程上的用语&#xff0c;判别一系统在有界的输入是否也产生有界的输出。若是&#xff0c;称系统为稳定&#xff1b;若否&#xff0c;则称系统为不稳定。 前端稳定性的体系建设大约可以分为了发布前&#xff0c;发布后&#xff0c;以及事故解决后三个阶段…...

Docker(三)Docker网络

目录1 结论知识2 link3 自定义网络1 结论知识 每一个容器启动时都会被分配一个ip地址&#xff1b;宿主机可以ping通任何一个docker容器&#xff1b;启动docker之后&#xff0c;宿主机默认网卡docker0&#xff0c;启动容器在宿主机注册网卡&#xff0c;使用的evth-pair技术&…...

Js高级API

Decorator装饰器 针对属性 / 方法的装饰器 // decorator 外部可以包装一个函数&#xff0c;函数可以带参数function Decorator (type) {/*** 这里是真正的decorator* description: 装饰的对象的描述对象* target:装饰的属性所述类的原型&#xff0c;不是实例后的类。如果装饰…...

团队:在人身上,你到底愿意花多大精力?

你好&#xff0c;我是叶芊。 今天我们讨论怎么带团队这个话题&#xff0c;哎先别急着走&#xff0c;你可能跟很多人一样&#xff0c;觉得带团队离我还太远&#xff0c;或者觉得我才不要做管理&#xff0c;我要一路技术走到底&#xff0c;但是你知道吗&#xff1f;带团队做事&am…...

Linux-Poolkit提权

Linux-Poolkit提权 漏洞复现- Linux Polkit 权限提升漏洞&#xff08;CVE-2021-4034&#xff09; 0x00 前言 polkit是一个授权管理器&#xff0c;其系统架构由授权和身份验证代理组成&#xff0c;pkexec是其中polkit的其中一个工具&#xff0c;他的作用有点类似于sudo&#x…...

【React全家桶】React Hooks

React Hookshooks介绍useState(保存组件状态)useEffect()useCallback(记忆函数)useMemo() 记忆组件useRef(保存引用值)useReducer()useContext(减少组件层级)自定义hookshooks介绍 在react类组件&#xff08;class&#xff09;写法中&#xff0c;有setState和生命周期对状态进…...

CLIP论文阅读

Learning Transferable Visual Models From Natural Language Supervision 利用自然语言的监督信号学习可迁移的视觉模型 概述 迁移学习方式就是先在一个较大规模的数据集如ImageNet上预训练&#xff0c;然后在具体的下游任务上再进行微调。这里的预训练是基于有监督训练的&am…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...