首页 > 编程语言 >冒泡排序算法

冒泡排序算法

时间:2024-08-06 12:58:13浏览次数:15  
标签:arr int 元素 交换 冒泡排序 算法 比较

冒泡排序核心思想:两两相邻的元素进行比较。

比如一组数据,{7,2,6,5,0}让其按升序排序。

第一趟:

(1)2,7,6,5,0        12元素比较,7比2大,交换

(2)2,6,7,5,0         23元素比较,7比6大,交换

(3)2,6,5,7,0         34元素比较,7比5大,交换

(4)2,6,5,0,7         45元素比较,7比0大,交换 -五个元素,两两比较,确定最大的元素

第二趟:

(1)2,6,5,0,7        12元素比较,2比6小,不交换

(2)2,5,6,0,7        23元素比较,6比5大,交换

(3)2,5,0,6,7        34元素比较,6比0大,交换 -前四个元素两两比较,确定第二大的元素

第三趟:

(1)2,5,0,6,7        12元素比较,2比5小,不交换

(2)2,0,5,6,7        23元素比较,5比0大,交换-前三个元素两两比较,比两次

第四趟:

(1)0,2,5,6,7        12元素比较,2比0大,交换-剩余两个元素比较

由上述示例可以看出冒泡排序特点:

1.一趟冒泡排序确定一个元素,n个元素,需要比n-1趟

2.每趟比较次数逐渐减少 

冒泡排序按升序——先确定最大元素;按降序——先确定最小元素。

#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
	int i = 0;
	int j = 0;
	for(i = 0;i <sz-1;i++){//sz个元素,共比较sz-1趟, 假设10个元素 
		for(j = 0;j<sz-i-1;j++){// 每一趟内部比较次数 //i=0,第一趟9次 次数=10-0-1 
			if(arr[j]>arr[j+1]){                       //i=1,8次            10-1-1
				int temp = arr[j];                     //i=2,7次            10-2-1
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			} 
		}
	}
	
 } 
int main()
{
	int arr[] = {7,2,6,5,0};//给出一个数组 
	int sz = sizeof(arr)/sizeof(arr[0]);//求数组元素个数 
	bubble_sort(arr,sz);//冒泡排序函数,需要数组,及元素个数,传递这两个参数 
	int i = 0;
	for(i = 0;i<sz;i++){
		printf("%d\n",arr[i]);//打印排好的数组 ,0,2,5,6,7
	}
	return 0;
 } 

 如果第一趟无交换,说明已经有序,无需后续交换。所以上述代码可以优化。

#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
	int i = 0;
	int j = 0;
	for(i = 0;i <sz-1;i++){
		int flag = 1;//假设没有发生交换 
		for(j = 0;j<sz-i-1;j++){
			if(arr[j]>arr[j+1]){
		        flag = 0;//发生交换说明无序        
				int temp = arr[j];                 
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			} 
		}
		if(flag==1){//这一趟无交换,有序,无需排序 
			break;
		} 
	}
	
 } 
int main()
{
	int arr[] = {7,2,6,5,0};
	int sz = sizeof(arr)/sizeof(arr[0]); 
	bubble_sort(arr,sz); 
	int i = 0;
	for(i = 0;i<sz;i++){
		printf("%d ",arr[i]);
	}
	return 0;
 } 

标签:arr,int,元素,交换,冒泡排序,算法,比较
From: https://blog.csdn.net/2302_77464435/article/details/140859760

相关文章

  • 算法工程师应当了解哪些算法?标准很乱啊
    Hereisamorestrictlycategorizedlistofalgorithms,withbriefexplanationsforeachcategory:1.SortingAlgorithmsQuickSort:Efficientsortingbypartitioningarraysaroundapivot.MergeSort:Divide-and-conquersortingthatmergessortedsubarr......
  • 动量优化算法:加速机器学习模型训练的秘密武器【动量】
    在机器学习和深度学习的训练过程中,优化算法扮演着至关重要的角色。动量优化算法是一种强大的技术,它能够加速模型训练,并帮助我们更快地找到最优解。这篇博客将详细介绍动量优化算法,力求让每一位读者都能轻松理解它的原理和优势。什么是动量优化算法?动量(Momentum)来源于物理......
  • 操作系统—调度算法,文件系统,设备管理,网络系统学习心得
    1.调度算法1.1进程调度算法1.2 内存页面置换算法1.3磁盘调度算法2. 文件系统2.1虚拟文件系统 2.2文件的使用 2.3文件的存储 2.4空闲空间管理2.5文件系统的结构2.6目录的存储2.7软链接和硬链接硬链接:同一个文件的两种路径......
  • mmpose-----人体骨骼关键点算法实现(姿态估计)
    MMPose:是一个基于PyTorch的开源的姿态估计工具箱,支持各种主流的人体姿态估计(2D多人姿态估计、2DHand姿态估计、133个KeyPoints的人体姿态估计、3D人体网格恢复)。(mmpose中包含很多个姿态估计算法,看都看不过来,主要讲述几个最新的top,简单操作,即学即用,跑一下不同的api就有不一样......
  • 从0开始的算法(数据结构和算法)基础(一)
        当我们学会算数开始,算法就无处不在,买菜的时候18元的菜,手上就20元和三张1块的,大多数的人都会全给然后找5块吧。它们是计算机科学的核心,在数字时代更是如此,是解决问题的关键,一个好的算法工程师,到哪去都是很吃香的,对于一个普通程序猿来说,能够掌握算法(不是知道,不会用),但算法......
  • 从0开始的算法(数据结构和算法)基础(二)
    算法效率的评估    评估算法效率的好坏主要涉及到算法的时间复杂度(TimeComplexity)、空间复杂度(SpaceComplexity)以及在实际应用中的运行性能。曾经调侃中文压缩包事件[1],白话、成语、文言文,大多数时候我们明意思白时间和知识量是递增的,时间增长和我们学习的文言文长短有......
  • 「代码随想录算法训练营」第三十天 | 动态规划 part3
    46.携带研究材料(0-1背包问题)题目链接:https://kamacoder.com/problempage.php?pid=1046文章讲解:https://programmercarl.com/背包理论基础01背包-1.html视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6/题目状态:看题解过思路:创建一个二维的dp数组,用来进行动态规划,其......
  • 基于springboot的协同过滤算法的个性化音乐推荐系统(源码+Lw+文档+讲解等)
    博主介绍:✌十余年IT大项目实战经验、在某机构培训学员上千名、专注于本行业领域✌技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫+大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战项目。主要内容:系统功能设计、开题报告......
  • MATLAB在算法处理上的作用
    MATLAB在算法处理上的作用引言MATLAB(MatrixLaboratory)是由MathWorks公司开发的一种高性能语言及其交互环境,广泛应用于数学计算、算法开发、数据分析、仿真建模等领域。其强大的计算能力、丰富的工具箱和高效的可视化功能使其在算法处理方面表现出色。本文将详细探讨MATLAB在......
  • Python回溯算法
    回溯算法回溯算法是一种系统的搜索算法,用于解决诸如排列组合、子集生成、图的路径、棋盘问题等问题。其核心思想是通过递归尝试各种可能的解决方案,遇到不满足条件的解时则回退(回溯),继续尝试其他可能性,直到找到所有的解决方案或确认无解。主要步骤:选择路径:在当前步骤选择一个可......