算法基础——冒泡排序、选择排序、插入排序的分析

常用排序算法--冒泡排序及改进和插入排序时间复杂度分析 常用排序算法–冒泡排序及改进和插入排序时间复杂度分析 常用排序算法冒泡排序及改进和插入排序时间复杂度分析 排序及常见排序算法 插入排序时间复杂度分析 冒泡排序 冒泡排序的改进 排序及常见排序算法 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为 阅读详情

通过几天的学习,下面是我对冒泡排序、选择排序、插入排序的学习总结。

要弄懂如何运用冒泡排序、选择排序、插入排序就得搞清楚它们的原理;

首先我来讲讲第一点:

大O表示法:

大O表示法是一种特殊的表示法,指出了算法速度有多快。能够表示一些常见算法的运行时间。用O(n)表示,n代表操作的次数。

冒泡排序算法:时间复杂度是O(n*n)

冒泡排序算法的原理如下:(从后往前)

比较相邻的元素,如果第一个比第二个大,就交换它们两个的位置。对每一相邻的元素做相同的工作,从开始第一对元素到结尾的最后一对元素。 最后的元素应该是最大的数。

然后在针对所有元素重复以上的步骤,除了最后一个。持续上面的步骤,直到没有元素需要比较。因为相同元素的顺序没有改变,所以冒泡排序是一种稳定的排序算法。

下面是我写的冒泡排序算法的代码,可以参考一下。

public class Maopaopaixu {
public static void main(String [] args){
	int [] Array = {20,9,18,54,86,71};//待排序的数组
	for(int i=0;i<Array.length-1;i++){//Array.length-1表示需要比较的轮数,比较的轮数等于数组的长度减1
		for(int j=0;j<Array.length-1-i;j++){//Array.length-1-i表示当前第i轮需要交换的次数
			if(Array[j]>Array[j+1]){
				//交换两个数的位置
				int number=Array[j+1];
				Array[j+1]=Array[j];
				Array[j]=number;
			}
		}
	}
	for(int n:Array){//输出结果
		System.out.println(n);
	}
}
}

选择排序算法:时间复杂度是O(n*n)

选择排序算法原理如下:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已经排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。

选择排序相对冒泡排序而言,比较的轮数相同,但是选择排序的交换位置的次数要少些,更加的稳定。如果数据的元素很多的话,选择排序无疑会比冒泡排序更快。

下面是代码,仅供参考:

public class Xuanzepaixu {
public static void main(String []args){
	int [] Array = {20,9,18,54,86,71};//待排序的数组
	//控制比较的轮数
	for(int i=0;i<Array.length-1;i++){
		int Minindex=i;//假设最小值的下标
		for(int j=i+1;j<Array.length;j++){
			if(Array[Minindex]>Array[j]){
				Minindex=j;//将当前位置下标赋值给最小值下标
			}
		}
		if(Minindex!=i){//判断需要交换的数的下标是否为自己
			//交换位置
			int number=Array[Minindex];
			Array[Minindex]=Array[i];
			Array[i]=number;
		}
	}
	//输出结果
	for(int n:Array){
		System.out.println(n);
	}
}
}

插入排序算法:时间复杂度:O(n*n)

插入排序算法原理:(从后向前找到合适的位置插入)

每步将一个待排序的位置的数据记录,按照其顺序码大小插入到前面已经排好序的子序列的合适位置(从后向前查找找到合适位置后),直到全部插入排序完位置。

下面是代码:

public class Charupaixu {
public static void main(String []args){
	int [] Array = {20,9,18,54,86,71};//待排序的数组
	//控制比较的轮数
	for(int i=1;i<Array.length;i++){
		int temp=Array[i];//记录操作数
		int j=0;
		for(j=i-1;j>=0;j--){
			if(Array[j]>temp){
				Array[j+1]=Array[j];//往后挪一位
			}
			else{
				break;
			}
		}
		if(Array[j+1]!=temp){//如果数组的当前元素不等于temp
			Array[j+1]=temp;
		}
	}
	//输出结果
	for(int n:Array){
		System.out.println(n);
	}
}
}

以上是我对冒泡排序、选择排序、插入排序的理解,错误之处还请指正,希望能给大家提供一点帮助。

冒泡排序的基本概念冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束 冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束 立即下载

相关推荐

IT资产管理(三)之GLPI资产录入

glpi 在 10 版本之后已经有自带的 glpi-agent 代理程序可自动获取服务器、电脑等的信息并进行自动录入和更新,不再依赖 10 版本之前的 fusioninventory 插件或者第三方资产统计平台 OCS Inventory 等

予挚之的博客 2983

数据结构之直接插入排序(算法思想,复杂度分析)以及冒泡排序和直接插入排序的比较

一般来说,插入排序都采用in-place在数组上实现。 具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序。 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素移到下一位置; 重复步骤3,直到找到已经排序的元素小于或者等于新元素的位置; 将新元素插入到该位置后; 重复步骤2-5; eg: 代码如下:直接插入排序: public stat...

C_U_N_Z的博客 925

OpenClaw 快速安装与本地应用实战 —— 每一步都有截图加详细说明,本地AI助手,让打工人也有下属

《OpenClaw 2026开源智能体框架10分钟快速部署指南》摘要:本文提供OpenClaw最新版全平台部署方案,重点解决三大核心问题:1)环境配置优化,通过一键脚本实现3-8分钟快速安装(含国内镜像加速方案);2)初始化配置详解,包含大模型绑定(智普AI/本地模型)与5个高频技能安装;3)实战演示文件自动整理任务。同时总结6类常见故障解决方案,涵盖权限、端口占用等典型问题,确保用户从安装到首个自动化任务落地全程无障碍。特别强调Windows需管理员权限、禁用中文路径等关键注意事项,实现"安装即

weixin_43538316的博客 808

冒泡排序、选择排序、堆排序、快速排序、插入排序算法复杂度分析与算法实现(自己总结与转)

1、冒泡算法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Jackery's Special Column 3433

人脸关键点定义汇总

前几天看一份代码临时需要找49个人脸关键点位置定义的图片发现怎么百度都搜不到,最后幸好谷歌可以使用了就用谷歌搜到了。所以在这里汇总一下我所知道的人脸关键点的定义和相关的一点东西,以备不时之需。 68个关键点 最常用的工具是Dlib,网址:http://dlib.net/ dlib的68个特征点检测算法是ERT算法【1】 使用dlib检测68个特征点的python示例见:http://dlib.n...

程序媛 7642

Llama模型结构拆解:为什么MLP模块要这样设计?从参数配置到计算流程全解析

本文深入解析了Llama模型MLP模块的设计精髓。通过拆解其三线性层结构、门控机制与SwiGLU激活函数,揭示了并行计算如何提升效率,并详细阐述了intermediate_size参数配置背后的经验权衡与计算考量,帮助读者透彻理解这一核心组件的设计逻辑与工程实现。

mac99的博客 529

排序算法的实现及时间复杂度分析——计数排序、选择排序、冒泡排序、插入排序

排序算法 排序算法是解决问题中常见且非常重要的一环,针对相应的问题选择相应的排序算法,能够提高问题解决速度,节省时间!!! 常见的排序算法有: 排序算法 关键步骤 时间复杂性 最好 最坏 计数排序 比较 n(n - 1)/2 + n n(n - 1)/2 + 2n - 1 移动 0 6(n - 1) 选择排序(及时终止的) 比较 n - 1 n(n - 1)/2 移动 3 3(n - 1

striveAgain丶的博客 1030

MS1826A HDMI 多功能视频处理器 HDMI4进1出画面分割芯片

基本介绍 MS1826A 是一款多功能视频处理器,包含 4 路独立 HDMI 音视频输入通道、1 路 HDMI 音视 频输出通道以及 1 路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字库定 制型 OSD;可处理隔行和逐行视频或者图形输入信号;有四路独立视频播放引擎可支持视频多路 播放。该产品提供了高质量的视频输出,有解隔行输入、视频增强,以及帧率转换的处理能力。 功能特征 视频输入输出  四路独立 HDMI 输入通道  一路 HDMI 输出通道  最高支持 4K@3

qq_45645383的博客 1781

冒泡排序以及复杂度分析(JAVA)

冒泡排序(JAVA) 冒泡排序算法的原理如下: [1] 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 冒泡排序是一种非常经典的算法,易于理解而且容易实现。 复杂度: 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数和记录移动次数均达到最小值(

qq_44095715的博客 1669

保姆级教程:手把手教你用CANoe/CANalyzer读取汽车故障码(UDS 0x19服务实战)

本文提供了一份详细的CANoe/CANalyzer使用教程,指导如何通过UDS 0x19服务读取汽车故障码。从硬件配置到报文构建,再到故障码解析,手把手教你完成汽车诊断全流程,特别适合汽车电子工程师和诊断开发人员。

weixin_42524945的博客 258

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2567

C语言基础排序算法(含动画演示) 插入排序、交换排序、冒泡排序、选择排序、归并排序、希尔排序、stl 排序、各种排序算法比较分析:

C语言排序算法:插入排序、交换排序、冒泡排序、选择排序、归并排序、希尔排序、stl 排序、各种排序算法比较分析: 1. 插入算法 (1). 直插排序 (2). 希尔排序 2. 交换排序 (1). 冒泡排序 (2). 选择排序 (3). 快速排序 3.stl 排序 vector<int>a; a.sort(); ...

Eli_Code 1940

【机器学习-18】特征筛选:提升模型性能的关键步骤

我们将介绍不同类型的特征筛选方法,包括基于统计的方法、基于模型的方法和嵌入式方法等,并详细解释每种方法的原理和适用场景。通过特征筛选,我们可以减少数据集的维度,降低模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。通过选择适当的特征筛选方法,我们可以减少模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。然而,并非所有的特征都对模型的性能提升有所贡献,有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关的。我们的目标是通过特征筛选选择出对欺诈检测最有用的特征,以提高模型的预测精度。

qq_38614074的博客 1万+

排序算法(6种基础排序算法)

1、冒泡排序 (1)(1)(1) 算法原理 冒泡排序在所有排序算法中,属于比较基础的一种。它的原理就是通过遍历待排序元素列,依次比较相邻元素,按照一定的规则调整它们的顺序(如何复合规则,则继续遍历),直至排序完毕。 一般来说,这个算法都是用来针对数组排序,而且往往最终结果都是非降序排列的,因此狭义地来说,冒泡排序可以归纳为: a. 比较相邻元素,若前者大于后者,则进行交换; b. 对每一组相邻元素...

weixin_44650011的博客 1851

Devexpress16.2.6破解工具

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基础排序算法详解:冒泡排序、选择排序与插入排序

冒泡排序、选择排序、插入排序是排序算法的“入门三剑客”,它们简单易懂,却能揭示许多排序算法的本质。希望通过这篇文章,你能深入理解它们的逻辑与实现,并为接下来的高级排序算法打下坚实的基础。有什么问题或建议,欢迎评论区讨论,我们一起进步!🎉。

CHENWENFEIc的博客 855

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

冒泡排序,选择排序,插入排序

1. 冒泡排序         冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。冒泡排序算法的基本流程是:每一轮从头开始两两比较,将较大的项放在较小项的右边,这样每轮下来保证该轮最大的数在最右边。 算法程序如下: [java] view plain copy public void bub

AnneQiQi的博客 1558

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

三个简单排序算法:冒泡排序、选择排序、插入排序

以下从基础开始,逐步详细复习各个排序算法。先从三个最基础最简单的排序算法开始。他们分别是冒泡排序、选择排序、插入排序。以下都是java代码,并且认为升序是有序。一、冒泡排序1、代码public class Main{//冒泡排序 public static void main(String[] args){ int[] a=new int[]{1,3,1,2,0,4,5,2,6,2,0}; ...

Gensoukyo 7647

COMSOL与MATLAB联合仿真:多物理场寻优实战指南

多物理场仿真(Multiphysics)是现代工程设计的核心能力,其本质是耦合多个物理场方程并求解高维非线性系统。COMSOL凭借精细网格控制与内置物理接口,提供高保真建模能力;MATLAB则依托优化工具箱与矩阵计算生态,支撑灵活算法实现与过程可视化。二者联合仿真的技术价值在于打通‘建模精度’与‘决策智能’的断点,实现参数自动寻优、目标函数自由定义及收敛过程实时监控。典型应用场景涵盖射频器件(如BAW谐振器)、热-力-电耦合系统、微机电结构优化等。本文聚焦COMSOL LiveLink for MATLAB

weixin_34159110的博客 359

数据结构与算法——选择排序和插入排序

1.回顾 前面说到了冒泡排序,这是一种时间复杂度为 O(n2) 、是原地排序和稳定的的排序算法,具体思路是:根据相邻两个元素之间比较大小,然后交换位置,得出最后排序的结果。具体可参考我写的这一篇文章:数据结构与算法——冒泡排序,今天来看看另外两种基础的排序算法:选择排序和插入排序。 2.选择排序 先来看看选择排序,选择排序的思路其实很简单,将排序的数据分为已排序区间和未排序区间,一般是以第一个元素...

roseduan 的个人博客 584

选择排序、插入排序、冒泡排序、希尔排序

简介 以下总结几个基础的排序算法,包括选择排序、插入排序、冒泡排序、希尔排序,这几个排序算法是比较简单的几个。以下给出算法的分析和代码示例。 时间复杂度 选择排序、插入排序、冒泡排序、希尔排序四个排序算法的时间复杂度都是O(n^2)。 算法分析 选择排序 选择排序取第一个元素以此与后续的元素进行比较,保存最小的元素的下标,最终把最小的元素与第一个元素进行交换,第二次遍历取第二个元素,在...

weixin_34126215的博客 159

三种简单排序算法:冒泡排序、选择排序、插入排序(c++实现)

0 简介 排序问题是一个基础又重要的问题,无论是工作面试或是考试都常常遇到。之前学习了一系列排序算法,但是很久不看又忘记了,特此总结。先总结一下三种简单的排序算法,后续总结更高级的算法,如归并、快排等。以下算法均为升序排序。 1 冒泡排序 冒泡排序是大多数人接触到的第一个排序算法,它的算法采取了逐渐缩小未排序序列的思路。对于一个长度N的数组,具体的算法步骤为:首先确定未排序的序列长度为N,然后让未排序序列中最大的值浮游到末尾(冒泡名称的由来),第二步,确立未排序的序列长度为N-1,在未排序序列中找到最大的值

梁熙民的csdn博客 583

C++实现经典排序算法——冒泡排序,选择排序,插入排序

#1冒泡排序 冒泡排序主要是通过多次比较和交换来实现;通过循环依次比较,不断把最小的数字排在该次比较中的最左边。即可将数组中的数按照从大到小的顺序排好。其示例代码如下: void BubbleSort(int *a, int len) { int i, j, k, temp; for (i = 0; i < len - 1; i++) { for (j = len - 1; j ...

NeverDelay 809

基础排序(冒泡排序,选择排序和插入排序)

一些常见的排序方法,记录在此。(好记性不如烂笔头) 一:冒泡排序法:    1.思路:第一次两两遍历所有的元素,找到最大的元素放置到最右边,第二次遍历(n-1)个。这样下来整个就是从小到大排列了。 public void bubbleSort(int[]source){ for(int i=source.length-1;i&gt;0;i--){ for(int j=0;j&l...

echohuangshihuxue的博客 339

算法——蛮力法之选择/冒泡/插入排序

选择/冒泡/插入排序 排序算法简介 排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要手动实现,但是了解这些精妙的思想对我们还是大有裨益的。本文介绍最基础的三类算法:选择,冒泡,插入。 交换数组元素 排序算法中经常用到交换数组元素的操作,所以我们预先定义好这个函数swap /** * 交换数组元素 * @param arr * @param a ...

qq_36629741的博客 682

冒泡排序、插入排序、选择排序-Java实现

冒泡排序、插入排序、选择排序 /** * 冒泡排序 * * @param a 表示数组 * @param n 表示数组大小 */ public void bubbleSort(int[] a, int n) { if (n <= 1) { return; } for (int i = 0; i < n - 1; ++i) { // 提前退出冒

年少挽滑稽世无双的博客 725

最详细的剖析排序算法之冒泡排序,选择排序,插入排序,满满干货,绝对有干货

前言 这段时间一直在研究算法,首先从基础研究,那就是排序了, 为什么我要把这三个放到一起呢? 首先这三个算法最简单,入门基础 其次因为通过这段时间的学习我发现这&quot;哥三&quot;总体上有很多共性放在一起很合适 但细节方面有稍微有点不同, 下面我来把这&quot;哥三&quot;整的明明白白的 1、冒泡排序 首先说明基本上所有的排序算法默认都是从小到大的顺序 排序思想: 冒泡排序它是通过相邻俩个数比大小.大的数放后面,从头开...

gd359353793的博客 662
上一篇: java IO流学习总结
下一篇: java表达式二叉树的构建
coder150806
博客等级 码龄8年 79粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值