冒泡排序算法及优化

冒泡排序算法及其优化 冒泡排序算是排序算法里面的一种较为简单的算法,也是我接触的第一种排序算法,有升序与降序之分,如果面试的时候面试官问道这个题目,一定要问清楚是升序还是降序,这样会给你加分。 下面,我以升序来讲一下它的运作。 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 阅读详情

冒泡排序

冒泡排序是一种常用且非常简单的排序法,对数组内的元素进行比较排序,它的算法描述如下:

  • 比较相邻的两个元素,如果第一个比第二个大,就交换它们的位置

  • 对每一对相邻元素都进行比较,比较完后找到最大值

  • 重复以上步骤,每次比较次数减一次,直到不需要进行比较


冒泡排序具体实现过程:

  • 首先定义一个无序数组

  • 使用两个for循环,外循环每次执行次数减一次,内循环进行元素比较

参考代码:

#include<stdio.h>
#include<stdlib.h> 
int main(void)
{
	int arr[10];
	int n = sizeof(arr)/sizeof(arr[0]);
	int temp = 0;
    
	printf("请输入%d个整数:",n);
	for(int i=0;i<n;i++){
		scanf("%d",&arr[i]);
	}
	//比较相邻两个数的大小,并交换两个数的位置
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-1-i;j++){
			if(arr[j]>arr[j+1])
			{
				temp = arr[j+1];
				arr[j+1] = arr[j];
				arr[j] = temp;
			}
		}
	}
	printf("排序后的数列:");
	for(int i=0;i<n;i++){
		printf("%d ",arr[i]);
	}
	return 0;
}

改进优化:如果在一次冒泡中没有进行交换,表明数列已经有序则不需要再进行冒泡,然后退出。

使用标志位来记录有无元素位置交换。

参考代码:

#include<stdio.h>
#include<stdlib.h> 
int main(void)
{
	int arr[10];
	int n = sizeof(arr)/sizeof(arr[0]);
	int temp = 0;
    int flag = 0;//默认为有序(改进)
	printf("请输入%d个整数:",n);
	for(int i=0;i<n;i++){
		scanf("%d",&arr[i]);
	}
	//比较相邻两个数的大小,并交换两个数的位置
	for(int i=0;i<n-1;i++){
		for(int j=0;j<n-1-i;j++){
			if(arr[j]>arr[j+1])
			{
				temp = arr[j+1];
				arr[j+1] = arr[j];
				arr[j] = temp;
                flag = 1;
			}
		}
         if(flag == 0){
             break;
         }
	}
	printf("排序后的数列:");
	for(int i=0;i<n;i++){
		printf("%d ",arr[i]);
	}
	return 0;
}
}

冒泡排序算法优化 这些优化使得冒泡排序在特定场景下具有实用价值,但时间复杂度仍为O(n^2),大规模数据排序建议使用快速排序等更高效算法。3)双向排序:交替进行正反双向扫描,有效处理类似[2,3,4,5,1]的特殊序列。1)提前终止:通过swapped标志位检测本轮是否发生交换,若未交换说明已有序。2)跳跃优化:通过sortBorder动态缩小排序边界,跳过已有序区间。测试数组:[5, 8, 6, 3, 9, 2, 1, 7]1 提前终止优化(最优情况时间复杂度O(n))2 跳跃优化(记录最后交换位置) 阅读详情

相关推荐

冒泡排序及三种优化方式代码

此资源是本人演示冒泡排序及其优化方案的示例代码,欢迎大家下载。关于冒泡排序的介绍,也可以参考本人博文https://blog.csdn.net/Abel_Liujinquan/article/details/88880483

保姆级!如何在Window Server服务器上用tomcat部署java web项目

如果在别的地方,就把他复制进src/main/resources里,路径名可能不一样,但是resources一般是一样的,把sql文件放在resources里一起打包,否则idea不会打包在其他地方的sql文件。然后关掉小黑窗,让服务器关闭。首先,打开idae软件(我项目用的idea,也可以其他)导入你的项目,然后运行项目,确保项目能在localhost:8080,即在本地上运行。然后打开tomcat目录下的bin/startup.bat文件,运行tomcat服务器,出现一下提示,即运行成功。

z12312369的博客 3126

STM32 BootLoader 入门教程:从原理到 APP 跳转实现

在 STM32 项目开发中,BootLoader 通常用于实现固件升级、程序引导和应用程序校验。本文从最基础的 BootLoader 原理开始,讲解 STM32 内部 Flash 分区设计、APP 地址偏移、向量表重定位、BootLoader 跳转 APP 的核心代码,以及实际开发中常见的问题。本文适合刚开始接触 STM32 BootLoader、IAP 在线升级、串口升级、OTA 升级的开发者阅读。

lidecong133的博客 1674

栈

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 1024 //栈:注意和动态数组的区别: //动态数组这里用的指针是二级指针因为数组的大小无法提前确定,并且用户数组类型无法确定,要用void*一级指针来接收 //所以要在堆区动态开辟数组存放void*类型数据要用二级指针来接收 //这里的栈已经知道数组的最大长度,因此..

m0_53157173的博客 376

帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递

本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。

weixin_42522857的博客 163

用Pixhawk 2.4.8和PX4 1.13,从零搭建你的第一支无人机编队(附避坑清单)

本文详细介绍了如何使用Pixhawk 2.4.8飞控和PX4 1.13固件从零搭建低成本无人机编队系统。涵盖硬件选型、固件配置、多机通信和编队飞行逻辑开发的全流程,特别针对学生和爱好者提供实战验证的避坑方案,帮助实现多机协同飞行。

weixin_27219587的博客 403

栈的链式存储

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 1024 //节点的结构体 struct stackNode { //只维护指针域 stackNode* next; }; //栈的结构体 struct lstack { //这里头节点不写成指针形式,是因为栈的结构体会开辟在堆区 //如果头节点用指针形式表示,.

m0_53157173的博客 302

Agent 长期记忆三代演进:从 RAG 到 Memory Graph,mem0 / Zep / LangMem / Letta 深度横评

文章摘要 2026年,Agent长期记忆技术迎来关键突破,OpenAI、Anthropic等厂商通过扩大上下文窗口和推出记忆工具,推动长期记忆从工程补丁发展为独立技术层。本文通过分析三代记忆架构演进(RAG→结构化Fact→MemoryGraph)和四大方案(mem0/Zep/LangMem/Letta)的8维度横评,揭示以下核心观点: 长上下文≠长期记忆:128K上下文如同RAM,仍需硬盘式记忆层筛选和结构化存储,避免“Context Rot”导致的准确率下降。 三代架构演进: Gen1(RAG):向量检

LDZKKJ的博客 1437

关于冒泡排序的最简单方法和进一步的优化

以前接触过一些排序方法,对冒泡排序也有一定的了解。但是只是为了记住而了解。此次重新学习了冒泡排序,发现自己当初学习的只是最简单的冒泡排序算法。急需进一步的优化。在此,我将自己最新学到的优化方法说出来和大家一起分享,也为了自己将来的巩固学习。 先来看最简单的冒泡: class Bubble_2 { public void bubble_2(int...

weixin_34024034的博客 437

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1610

Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)

前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.

CYK_byte的博客 4万+

冒泡排序及其优化

Bubble Sort比较简单,本文首先列出了基础版本Bubble Sort的伪代码,之后做两点小的优化。 1.基础版本BubbleSort # 原始版的BubbleSort # 时间复杂度为O(n^2) function BubbleSort(array X[], int length) { for (int i = 0; i &amp;lt; length; i++) { ...

但行好事,莫问前程。 1339

windows exe爬虫:exe抓包

在不知情所拦截应用使用的流量时,所以建议用Wireshark。本文利用python代码,实现自动拦截,写入pcap包,并用代码分析流量的协议。这样会在本地目录下生成capture_inbound.pcap,可以用wireshark分析,也可以利用python代码进行分析,如果使用python代码进行分析,需要借助pyshark或者scapy。使用的python WinDivert的包,当然前提也是需要安装Wireshark软件,设置环境变量,并安装pydirvert包。

youbingchen的博客 617

冒泡排序算法以及优化

什么是冒泡排序呢?冒泡排序的英语名是Bubble Sort,是一种最基础的交换排序。 大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点一点的向上浮。而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以向小气泡一样,根据自身大小,一点一点向着数组的一侧移动。具体如何移动呢?我们来看一下例子: 有8个数组组成一个无序数列:5,8,6,3,9,2,1,7,希望从大到小排序。按照冒泡排序的思想,我们要把相邻的元素两两进行比较,根据大小

被一个OIER遗弃的一堆烂代码 1934

华为OD新系统机试真题 - 端口流量统计

华为OD机试新系统真题【端口流量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月26号机试真题【端口流量统计】。

qq_45776114的博客 766

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关于冒泡排序算法优化

最普通的冒泡排序算法 function bubbleSort($arr){ $size = count($arr)-1; for ($i = 0;$i <= $size ; $i++){ for ($j = $size-1;$j >= $i;$j--){ if ($arr[$j] > $arr[$j+1]){ $tmp = $arr[$j]; $...

PHPerJiang 195

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

冒泡排序算法_细说冒泡排序及其五种优化算法

01 冒泡排序 冒泡排序算法思想简单来说:在内层一次遍历中,arr[j] 与 arr[j - 1] 进行比较,如arr[j - 1] < arr[j], 不改变,反之互换值,保证arr[j]存储着 0~j - 1中的最大值,随一次遍历当前数组最大值也下沉至末尾,经过n - 1次外层循环,可使n - 1个元素下沉,最后一个元素位置确定,排序完成。 举个例子方便理解, ...

weixin_39822147的博客 342

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

经典算法(1):冒泡排序及其优化

冒泡排序算法固然简单,但是在各大竞赛以及大公司的面试里常会考到冒泡排序的优化。这篇博客对冒泡排序进行了两次比较彻底的优化,并有完整的代码实现。

扬帆向海的博客 4万+

冒泡排序算法的优化

最近看见一道面试题,是问传统的冒泡排序算法是否还能进行优化。刚好大学室友就有参加ACM的朋友,之前和他们一起研究过几天算法,其中就看到过排序算法的优化,没想到面试题中还会有冒泡排序算法的优化这样的题目,那么这里介绍一下冒泡排序算法的优化吧。 冒泡排序是最简单最经典的排序算法,对于它怎么进行优化呢?我们知道,传统的冒泡排序对于原数组的交换次数会有差异,但是比较次数却是固定的。这样就很尴尬,比如一个...

shenqh 1062

冒泡排序理解以及算法优化

冒泡排序理解与算法优化 冒泡排序为基本内部排序算法(即不借助外部空间,内部自我排序), 如上图,冒泡排序经过不断比较相邻的元素的值,进行交换,第一次从第一个元素到最后一个元素的交换,会将该数组的最大值交换到最后一项,以此循环,我们不断地找出剩余元素中的最大值,并将该最大值移动到剩余元素中的最大值.最终排序成功. (本文中语言使用c语言,算法利用函数实现,编译器参考DEV C++) void Bubble_sort(int *a,int len)//函数传递数组名字以及数组长度 { int i,j,k

weixin_52333983的博客 1027

优化后的冒泡排序算法

package com.xj.www.sort; /** * 优化后的冒泡排序 * * @author xiongjing * */ public class BubbleSort { /** * 冒泡排序具体流程实现如下: * 1.对数组中的各数据,依次比较相邻的两个元素的大小。 * 2.如果前面的数据大于后面的数据,就交换这个...

JavaBoy的博客 469

冒泡排序算法实现及优化

相信冒泡排序算法大家都不陌生,今天说一下如何进行优化 正常的一组数据进行冒泡排序如下图: 但是如果一组数据本身就是已经排序好的,如1,2,3,4,5,6,那么它还是会像上面那样的顺序进行排序,通过下面的改变可以很好的优化这一点 直接上代码: import java.text.SimpleDateFormat; import java.util.Arrays; import java.util....

不言尘世 306

优化冒泡排序算法

优化冒泡排序算法 问题分析:冒泡排序算法的基本思想就是相邻数据比较若逆序则交换,经过n-1趟比较交换后,逐渐将小数据冒到数组的前部,大的数据则陈到数组的后部,从而完成排序工作。 现在假设本来的数据本来就是从小到大有序的,则原有算法仍要做n-1趟比较操作,事实上,一趟比较下来,若发现没有进行过交换,若发现没有进行过交换,就已经说明数据全部有序,无须进行其后的比较操作了。 当然年数据原本有序的概...

weixin_30914981的博客 131

冒泡排序及算法优化

冒泡排序

小伍的程序之路 218
上一篇: 编程四大件
下一篇: 线性表-顺序表
大忽悠@
博客等级 码龄7年 23粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值