Java排序算法之——冒泡排序,插入排序,选择排序

Mamba vs YOLO:目标检测选型指南(附实际项目对比) 本文深入对比了Mamba和YOLO在目标检测领域的性能差异与应用场景。通过实际项目数据,分析了两者在城市交通监控、工业质检等场景下的表现,提供了详细的选型指南和部署优化建议,帮助开发者根据实时性、精度等需求选择最适合的解决方案。 阅读详情

<1>冒泡排序
这个名词的还是很形象的,就是每次比较相邻的两个数,大的数总是往后面冒,所以每轮比较结束后,大数都会冒到最后面。
每次比较的结果如下:
无序数组  :8 2 4 3 5 7 1 9 6 (后面所有的排序都将使用这个数组)
第一轮比较:2 4 3 5 7 1 8 6 9 
第二轮。。:2 3 4 5 1 7 6 8 9
第三轮。。:2 3 4 5 1 6 7 8 9 
第四轮。。:2 3 4 1 5 6 7 8 9 
第五轮。。:2 3 1 4 5 6 7 8 9 
第六轮。。:2 1 3 4 5 6 7 8 9 
第七轮。。:1 2 3 4 5 6 7 8 9 
我们用程序来描述这种变化:

/**
	 * 冒泡排序,默认为从小到大排序
	 * @param array 需要排序的数组
	 */
	public static void bubbleSort(int[] array) {
		int length = array.length;
		for (int i = 1; i < length; i++) {//外层循环表示每一轮的比较,为了便于理解我们将i初始化为1,表示从第一轮开始,也能避免内层循环的下标越界
			for (int j = 0; j < length-i; j++) {//内层循环表示相邻的两个数比较,我们同数组下标一样,从0开始
				if (array[j] > array[j+1]) {
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
	}


如果是递减排序:

/**
	 * 冒泡排序
	 * @param array 需要排序的数组
	 * @param pattern 当参数不为空的时候,表示递减排序
	 */
	public static void bubbleSort(int[] array, String pattern) {
		if (StringHelper.isEmpty(pattern)) {//isEmpty()这是我自己写的一个工具类,用于判断字符串是否为null或者空
			bubbleSort(array);//当pattern 为空或者为null时候递增排序
			return;
		}
		int length = array.length;
		for (int i = 1; i < length; i++) {
			for (int j = 0; j < length-i; j++) {
				if (array[j] < array[j+1]) {//递减排序的话,那就让小的往后面冒就行了
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
	}

<2>插入排序
插入排序个人认为是很好理解的一种算法,实现的话也比较简单。
对于一个要排序的数组,我们将第一个数作为有序数组,然后后面的元素一次插入到这个有序数组中。
那么对于无序数组,他的元素就会分为已经插入的,和尚未插入的。
唯一不好理解的就是,用程序插入时候,移动元素怎么移动。
我们先看看数组每次的变化,我们还用上面的无序数组:
无序数组  :8 2 4 3 5 7 1 9 6 
已插入数组:                        8 尚未插入元素:2 4 3 5 7 1 9 6 
已插入数组:                     2 8 尚未插入元素:4 3 5 7 1 9 6 
已插入数组:                  2 4 8 尚未插入元素:3 5 7 1 9 6 
已插入数组:               2 3 4 8 尚未插入元素:5 7 1 9 6 
已插入数组:            2 3 4 5 8 尚未插入元素:7 1 9 6 
已插入数组:         2 3 4 5 7 8 尚未插入元素:1 9 6 
已插入数组:      1 2 3 4 5 7 8 尚未插入元素:9 6 
已插入数组:   1 2 3 4 5 7 8 9 尚未插入元素:6 
已插入数组:1 2 3 4 5 6 7 8 9 尚未插入元素: 
我们用程序来描述这个插入过程:

/**
	 * 插入排序,默认递增排序
	 * @param array 要排序的数组
	 */
	public static void insertSort(int[] array) {
		int length = array.length;
		for (int i = 1; i < length; i ++) {//因为第一个我们默认为已经排序了的,所以我们从第二个开始插入,也就是下标为1
			int j = i;
			int temp = array[j];
			while (j > 0 && temp < array[j-1]) {
				array[j] = array[j-1];//我们这里不需要交换,找到要插入的位置,后面的元素整体后移就行了
				j--;
			}
			array[j] = temp;//插入到对应的位置
		}
	}


递减排序:

/**
	 * 插入排序
	 * @param array 待排序数组
	 * @param parttern 排序方式,值不为空时候表示递减排序
	 * @return 有序数组
	 */
	public static void insertSort(int [] array, String parttern) {
		if (StringHelper.isEmpty(parttern)) {
			insertSort(array);
			return;
		}

		int j = 0;
		for (int i = 1; i < array.length; i++) {
			j = i;
			int temp = array[i];//记录要插入的值
			while (j >0 && temp > array[j-1]) {
				array[j] = array[j-1];
				j--;
			}
			array[j] = temp;
			
		}
	}


<3>选择排序
交换排序的思路是每一轮选出较小元素然后交换。
第一轮交换的时候,找出剩余9个元素中最小的,和第一个交换;
第二轮交换的时候,找出剩余8个元素中修小的,和第二个交换;
...
这个和冒泡排序有点类似的,但是算法实现不一样。
我们先看交换排序的过程:
无序数组  :8 2 4 3 5 7 1 9 6 
第一轮交换:1 2 4 3 5 7 8 9 6 (8和1交换 )
第二轮交换:1 2 4 3 5 7 8 9 6 (2不用交换)
第三轮交换:1 2 3 4 5 7 8 9 6 (4和3交换)
第四轮交换:1 2 3 4 5 7 8 9 6 (4不用交换)
第五轮交换:1 2 3 4 5 7 8 9 6 (5不用交换)
第六轮交换:1 2 4 3 5 6 8 9 7 (7和6交换)
第七轮交换:1 2 4 3 5 6 7 9 8 (8和7交换)
第八轮交换:1 2 4 3 5 6 7 8 9 (9和8交换)
我们看程序实现这种算法:

/**
	 * 选择排序,默认递增排序
	 * @param array 需要排序的数组
	 */
	public static void selectSort(int[] array) {
		int length = array.length;
		for (int i = 0; i < length; i++) {//外层控制选择次数
			int min = i;
			for (int j = i+1; j < length; j++) {//选择出最小元素的下标
				if (array[min] > array[j]) {
					min = j;
				}
			}
			if (i != min) {
				int temp = array[i];
				array[i] = array[min];
				array[min] = temp;
			}
		}
	}


递减排序:

/**
	 * 选择排序
	 * @param array 需要排序的数组
	 * @param pattern 当传值不为空时候,递减排序
	 */
	public static void selectSort(int[] array, String pattern) {
		if (StringHelper.isEmpty(pattern)) {
			selectSort(array);
			return;
		}
		int length = array.length;
		for (int i = 0; i < length; i++) {//外层控制选择次数
			int min = i;
			for (int j = i+1; j < length; j++) {//选择出最小元素的下标
				if (array[min] < array[j]) {
					min = j;
				}
			}
			if (i != min) {
				int temp = array[i];
				array[i] = array[min];
				array[min] = temp;
			}
		}
	}

 

OpenCV计算机视觉实战(3)——计算机图像处理基础 本文全面介绍了计算机视觉和数字图像处理的基础知识。从最基本的像素概念入手,详细讲解了图像在计算机中的表示方式,包括RGB、CMYK等色彩空间的工作原理及其应用场景。还系统分析了常见图像和视频文件格式的特点,梳理了计算机图像处理技术的发展历程,并重点介绍了OpenCV这一强大的开源计算机视觉库的功能与应用领域。 阅读详情

相关推荐

用野火FPGA开发板(EP4CE10)手把手教你实现一个高精度频率计(附完整Verilog代码)

本文详细介绍了基于野火FPGA开发板(EP4CE10)实现高精度频率计的全过程,涵盖等精度测量法的核心原理、Verilog代码实现及优化技巧。通过实际案例演示,帮助开发者掌握1Hz-50MHz范围、精度达0.1%的频率计设计方法,并提供完整的工程代码和实测数据。

weixin_29261711的博客 440

StringUtil.isEmpty()和StringUtil.isBlank()

StringUtil.isEmpty()和StringUtil.isBlank()

lsl332110的博客 1869

告别抖动与滞后:深入博能传动伺服DSC功能,用105报文提升多轴同步性能

本文深入解析博能传动伺服DSC功能如何通过105报文实现多轴同步性能提升,有效解决工业自动化中的抖动与滞后问题。详细介绍了DSC技术原理、105报文实现机制及多轴同步工程实践,帮助工程师优化伺服系统性能,实现绝对齿轮同步。

weixin_30394981的博客 185

StringUtil.isEmpty(str)、StringUtil.isNotEmpty(str)和StringUtil.isBlank(str)区别

最近使用到了字符串的非空判断,所有就整理了一下; 当你知道StringUtils的时候会发现使用null来判断是不是很low; StringUtil.isEmpty(null) == true StringUtil.isEmpty("") ==  true StringUtil.isEmpty("  ") ==  false StringUtil.isEmpty("bbbb") ==  ...

伟哥 2744

英伟达笔试1

本文摘要: 使用NAND2门设计4位奇偶校验发生器,通过15个NAND2门实现4输入异或功能,分三级结构完成奇校验计算。 时序分析公式总结: 建立时间约束:T_cq + T_comb(max) + T_setup + T_skew ≤ T_clk 保持时间约束:T_cq + T_comb(min) + T_skew ≥ T_hold 提供了两段路径的具体时序检查公式和建立违规修复方法 分析32位粘滞累积寄存器Verilog代码: 功能:记录输入数据中出现过的所有1位 每个bit独立实现,复位清零,有效输入时

soulermax的博客 167

C#上位机实战:借助NetToPLCSim与西门子S7-1200仿真通信全攻略

本文详细介绍了如何使用C#开发上位机程序,通过NetToPLCSim与西门子S7-1200进行仿真通信的全过程。从环境准备、PLC仿真环境搭建、网络配置到C#代码实现,提供了完整的实战指南和常见问题解决方案,帮助开发者快速掌握工业自动化通信技术。

weixin_30596343的博客 440

对于字符串的操作类

public enum EnumCompare     {         Small = -1,         Equals = 0,         Big = 1,         Null = 2     }     ///     /// 字符串操作帮助类,传入很多字符串,获取第一个非空的字符串     ///     public class StringHe

IT界的小菜比 701

rk3568 Android12 增加 USB HOST 模式开关(二)

将原有 USB-C 改为 USB-A,并在设置中增加USB工作模式开关可以让用户选择USB端口的功能模式,例如充电、文件传输、或MIDI设备。用户能够灵活管理设备的连接方式,优化数据传输和设备兼容性。

weixin_35723192的博客 734

StringUtils.isEmpty()和isBlank,isNoneBlank,isNotBlank的区别

StringUtils.isEmpty()和isBlank,isNoneBlank,isNotBlank的区别

Blue_Pepsi_Cola的博客 4280

爬虫不宕机!2026自愈式爬虫开发(Python+AI自动应对页面改版)

传统爬虫最大的痛点是"页面一改就宕机":前端布局调整、CSS选择器失效、数据结构变化,都会导致爬虫瘫痪,需要人工逐行修改代码。2026年,基于AI的自愈式爬虫成为行业标配:通过大模型自动识别页面结构变化、适配新的元素定位规则、修复数据提取逻辑,实现"页面改版不宕机,AI自动自愈"的企业级效果。本文从零讲解如何用Python+AI构建自愈式爬虫,聚焦页面改版自适应、故障自动修复、规则动态更新三大核心能力,附带可直接落地的生产级代码。问题场景解决方案LLM生成规则格式错误。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1215

YOLO11改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

yolo11,yolo11改进,yolo11创新,yolo11添加注意力机制

kay_545 1231

String类的.isEmpty()方法 空指针问题

最近,在实现网站国际化,从前端接受参数(字符串类型 language),在判断是否前端有参数传过来的时候,想用.isEmpty() 进行判断, String language = request.getParameter("l"); if(!language.isEmpty(language)){ //使用 _ 分割语言和国家 String[] s = language.split("_"); locale = new Locale(

siyue521的博客 3746

华为od 面试八股文_C语言_01_含答案

华为od 面试八股文_C语言_01_含答案

MISAYAONE的博客 3228

Java中的经典排序算法:插入排序、希尔排序、选择排序、堆排序与冒泡排序(如果想知道Java中有关插入排序、希尔排序、选择排序、堆排序与冒泡排序的知识点,那么只看这一篇就足够了!)

Java中的经典排序算法:插入排序、希尔排序、选择排序、堆排序与冒泡排序(如果想知道Java中有关插入排序、希尔排序、选择排序、堆排序与冒泡排序的知识点,那么只看这一篇就足够了!)

秋刀鱼不做梦的编程日常 5303

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java常见排序算法之冒泡排序、选择排序、插入排序、快速排序

Java实现常见的排序算法 冒泡 选择 插入 快速排序。代码清晰易懂

c1441173216的博客 1343

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java排序算法(插入排序,冒泡排序,选择排序)

java排序算法(插入排序,冒泡排序,选择排序) 先了解原理,然后自己跟着敲一下,加深印象 CMD编译命令:javac -encoding utf-8 SortList.java && java SortList 代码如下: import java.util.Arrays; public class SortList{ public static void main(...

yue_233的博客 360

JAVA 三种排序算法 (选择排序、插入排序、冒泡排序)形象图解,一看就会。

注: 以下均使用升序介绍。 选择排序: 从数组中找到最小的元素,和第一个位置的元素互换。 从第二个位置开始,找到最小的元素,和第二个位置的元素互换。 … 直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。 在这里插入图片描述 代码实现: public class Selection { public static void sort(int[] arr){ ...

Mtart liu的博客 604

java常见的排序算法(冒泡排序、选择排序、插入排序、shell排序、归并排序、堆排序、快速排序)介绍

java常见的排序算法(冒泡排序、选择排序、插入排序、shell排序、归并排序、堆排序、快速排序)介绍

alanchanchn的专栏 7万+

【Java_Base】常用排序算法:冒泡排序、选择排序、插入排序

冒泡排序比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 选择排序对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第...

dmy61973的博客 143

java选择排序冒泡排序_java实现排序算法:插入排序、选择排序、冒泡排序

直接上代码片段如下:package com.test.sort;/**** @ClassName: sortTest* @Description: TODO(java实现排序算法:插入排序、选择排序、冒泡排序)* @author SongLiGuo* @date 2016-11-3 下午5:17:06**/public class sortTest {/**** @Title: selection...

weixin_28950015的博客 117

java排序算法:选择排序、插入排序、冒泡排序、归并排序

 一、选择排序 时间复杂度O(n^2),不稳定。 package com.algorrithms.learn; /** * @program: com.algorrithms.learn * @description: 选择排序 * @author: liujinghui * @create: 2019-02-17 10:13 **/ public class SelectSor...

LJHSkyWalker的博客 368

常见排序算法(Java):选择排序,快速排序,堆排序,冒泡排序,插入排序,归并排序,桶排序

本文用java总结了常见的排序算法,虽然是java写的,但并没有用多少java特有的功能,如果有我会说明其用途,且讲的稍微有点浅,若有出错请指出并海涵如果看不懂java那个方法格式,那就着重看方法里面是如何实现的,然后可以尝试用自己擅长的语言去重新写一遍。

weixin_60660061的博客 1687

整理了下JAVA各种排序算法 (选择排序,冒泡排序,插入排序,快速排序,堆排序)

直接贴代码 /** * */ package com.wuyuan.job.util; /** * @ClassName: * @Description: * @author:bing.bai date: */ public class SortUtill { //选择排序 时间复杂度O(n^2) public static vo...

小白223的博客 387

java的冒泡排序口诀_Java实现的各种排序算法(插入排序、选择排序算法、冒泡排序算法)...

一、插入排序算法实现java版本public static int[] insert_sort(int[] a){for (int i = 0; i < a.length; i++){for(int j=i+1;j>0&&j{if(a[j]{int tmp = a[j]; //这样定义初始化逻辑上是可以的,j变量,每次tmp的值变化的a[j] = a[j-1];a[j-...

weixin_42314737的博客 234

黑马程序员——java基础排序算法:选择排序、冒泡排序和插入排序

——- android培训、java培训、期待与您交流! ———- /* 需求:将一组数组中的数从小到大排序 一、选择排序法思路: 1.用数组中第一个元素和之后的每个元素相比较,如果第一个元素大,则交换 两个数的位置,这样最小的元素便排到第一位。依次用第二个元素,第三个元 素……倒数第二个元素与排在其后面的元素比较,如果前面的数值大交换两个 数对应的下标。 2.当数组中所有元素两两比

java888kankan的专栏 643

Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等

import java.util.Arrays; /* * 实现了八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 * 以及快速排序、归并排序、堆排序和LST基数排序 * @author gkh178 */ public class EightAlgorithms { //插入排序:时间复杂度o(n^2) public static void i

畅游JAVA 309

面试时常常考察的java排序算法--选择排序、冒泡排序、插入排序

注:本文是从java语言角度对三种排序算法进行分析比较。 一、选择排序 核心思想: 依次拿当前元素和其后面的元素比较大小,满足条件就互换值 public static int[] shunxu(int[] arr){ int len = arr.length; int temp = 0; for (int i = 0; i < len-1; i++) { for (i...

前方一片光明 7337
上一篇: 番外:将自己的工具工程打成一个jar包
下一篇: Jdbc访问数据库
Akeman.liwer
博客等级 码龄12年 62粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值