【算法】冒泡排序

news2024/11/22 5:52:20

一.冒泡排序

主要思想:

反复交换相邻的元素,使较大的元素 逐渐冒泡到数组的末尾,从而实现排序的效果

实现过程:

1.遍历待排序数组,比较相邻的元素,如果前面的元素比后面的元素大,

     就交换这两个元素的位置

2.重复上述操作,直至不再需要交换

3.返回排序后的结果

演示:(64    34    25   12    22    11     90)

第一躺:

64    34    25   12    22    11     90

34    64    25   12    22    11     90       (64>34  交换)   

34    25    64   12    22    11     90       ( 64>25  交换)

34    25    12   64    22    11     90       (64>12    交换)

34    25    12   22    64    11     90       (64>22    交换)

34    25    12   22    11    64     90       (64>11    交换)

34    25    12   22    11    64     90       (64<90   不交换)

第二趟:

34    25    12   22    11    64     90 

25    34    12   22    11    64     90  (34>25 交换)

25    12    34   22    11    64     90  (34>12 交换)

25    12    22   34    11    64     90  (34>22 交换)

25    12    22   11    34    64     90  (34>11 交换)

25    12   22    11     34    64     90 (34<64 不交换)

25    12   22    11     34    64     90  (64<90 不交换)

第三趟:

25    12   22    11     34    64     90 

12    25   22    11     34    64     90  (25>12 交换)

12    22   25    11     34    64     90 (25>22 交换)

12    22   11    25     34    64     90 (25>11 交换)

12    22   11    25     34    64     90 (25<34 不交换)

12    22   11    25     34    64     90(34<64 不交换)

12    22   11    25     34    64     90 (64<90 不交换)

第三趟:

12    22   11    25     34    64     90 

12    22   11    25     34    64     90 (12<22 不交换)

12   11    22    25     34    64     90 (22>11 交换)

12    11   22    25     34    64     90   (22<25 不交换)

12    11   22    25     34    64     90 (25<34 不交换)

12    11   22    25     34    64     90 (34<64 不交换)

12    11   22    25     34    64     90 (64<90 不交换)

第四趟:

12    11   22    25     34    64     90

11    12   22    25     34    64     90

总结:

冒泡排序的时间复杂度为O(n^2),是一种稳定的排序方法,在实际应用中可能效率低。

二. C语言版

#include<stdio.h>
#include<Windows.h>
void bubble_sort(int arr[] ,int n){
	int i ,j,temp;
	for(i=0;i<n-1;i++){
		for(j=0;j<n-1;j++){
			if(arr[j] > arr[j+1]){
				 temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
}
	int main(){
		int arr[] ={64,34,25,12,22,11,90};
		int n=sizeof(arr)/sizeof(arr[0]);
		bubble_sort(arr,n);
		printf("Sorted array:\n");
		for(int i=0;i<n;i++){
			printf("%d ",arr[i]);
		}
			system("pause"); 
		return 0;
		
		
	}

代码解析:

#include<stdio.h>
#include<Windows.h>
void bubble_sort(int arr[] ,int n){
//冒泡排序算法,参数为整数数组和数组大小
    int i ,j,temp;
//定义比较用的两个指针i和j
    for(i=0;i<n-1;i++){
//外层循环用于遍历所有元素
        for(j=0;j<n-i-1;j++){
//内层循环用于循环比较相邻元素,从头一个一直到后一个未归为的元素
            if(arr[j] > arr[j+1]){
//如果前面的数大于后面的数
                 temp=arr[j];
//交换他们的位置
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}
    int main(){
        int arr[] ={64,34,25,12,22,11,90};
//声明未排序的整数数组
        int n=sizeof(arr)/sizeof(arr[0]);
//通过数组长度计算元素数量
        bubble_sort(arr,n);
//调用冒泡排序算法
        printf("Sorted array:\n");
        for(int i=0;i<n;i++){
//循环遍历排序后的数组并打印出来
            printf("%d ",arr[i]);
        }
            system("pause"); 
        return 0;
        
        
    }

调试:

三.Java版

package BubbleSort;

public class BubbleSort {
    public static void main(String[] args) {
        int [] arr={64,34,25,12,22,11,90};
        bubbleSort(arr);
        for(int num:arr){
            System.out.println(num+"");
        }
    }

    private static void bubbleSort(int[] arr) {
        int temp;
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }
}

调试:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统集成项目管理工程师 笔记(第八章:项目进度管理)

文章目录 8.1 规划项目进度管理 2938.1.1 规划项目进度管理的输入 2938.1.2 规划项目进度管理的工具与技术 2948.1.3 规划项目进度管理的输出 295 8.2 定义活动 2968.2.1 定义活动的输入 2968.2.2 定义活动的工具与技术 2968.2.3 定义活动的输出&#xff08;两清单、一属性&…

【深度学习】学习率与学习率衰减详解:torch.optim.lr_scheduler用法

【深度学习】学习率与学习率衰减详解&#xff1a;torch.optim.lr_scheduler用法 文章目录 【深度学习】学习率与学习率衰减详解&#xff1a;torch.optim.lr_scheduler用法1. 介绍1.1 学习率与学习率衰减 2. TensorFlow中的学习率衰减3. PyTorch中的学习率衰减2.1 optimizer 综述…

md/分类/信号领域/数字信号处理及MATLAB实现/频率调制(FM).md

文章目录 本文链接https://zh.wikipedia.org/wiki/频率调制用Python模拟FM/PM调制解调过程波形变化频率调制我的 本文链接 打死他 调频&#xff08;英语&#xff1a;Frequency Modulation&#xff0c;缩写&#xff1a;FM&#xff09;是一种以载波的瞬时频率变化来表示信息的方…

Java文件操作必备技能,10个小技巧让你快速掌握!

前言 在我们日常的开发中&#xff0c;文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中&#xff0c;我将给你们介绍 10 个实用的文件操作技巧。 使用 try-with-resources 语句处理文件 IO 流&#xff0c;确保在…

C++Vector类详解

目录 1.Vector介绍 2.Vector的常见使用 2.1 vector构造函数 2.2 vector iterator使用 2.3 vector空间增长问题 2.4 vector增删改查 2.5 vector迭代器失效问题 3.Vector深度剖析及模拟实现 3.1 模拟实现&#xff08;可跳过&#xff09; 3.2 不使用memcpy剖析 1.Vector介绍 ve…

【LeetCode】106. 从中序与后序遍历序列构造二叉树

1.问题 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1 输入&#xff1a;inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出&#…

世优科技AI数字人产品“世优BOTA”发布!全面提升AI虚拟员工能力

2023年4月20日,“世优BOTA”产品发布会在北京圆满落幕。此次发布会上,世优(北京)科技有限公司(以下简称“世优科技”)正式发布了新一代AI数字人现象级产品——“世优BOTA”。来自现实世界的LiveVideoStack创始人包研与来自数字世界的世优虚拟主持人「阿央」通过新颖的互动开场方…

JDK多版本配置及切换版本不生效问题解决

一、准备工作 首先你要有多个版本的jdk&#xff0c;如果没有请移至 https://www.oracle.com/java/technologies/downloads/ 下载&#xff0c;具体下载方法可参考&#xff1a;Java同学入职环境安装全讲解 二、配置环境变量 在环境变量中配置多个JAVA_HOME&#xff0c;我这里…

Java中TCP通信的实现

0、TCP通信 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c; 如果使用了 WireShark 工具&#xff0c;可以看到一次TCP连接建立时的整个过程。 1、单向通信 单向通信中&…

案例01-tlias智能学习辅助系统01-增删改查+参数传递

目录 1、需求说明&#xff1a;实现对部门表和员工表的增删改查 2、环境搭建 3、部门管理 3.1 查询部门 3.2 前后端联调 3.3 删除部门 3.4 新增部门 3.5 根据ID查询数据 3.5 修改部门 总结&#xff08;Controller层参数接收&#xff09;&#xff1a; 4、员工管理 4.…

CMIP6:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度

气候变化关系到农业、生态系统、社会经济和人类生存与发展&#xff0c;是当今世界关注的重点问题之一。IPCC&#xff08;Intergovernmental Panel on Climate Change&#xff09;第6次评估报告指出&#xff0c;自 20 世纪 50 年代以来&#xff0c;从全球平均气温和海温升高…

一个关于Mybatis和spring的公共组件starter

utils-springboot-starter 介绍使用说明 介绍 一个关于Mybatis和spring的公共组件starter&#xff0c;目前包含以下功能&#xff1a; 接口请求日志SQL执行日志数据自动加解密数据自动脱敏服务治理方面&#xff1a; 接口限流接口熔断降级&#xff1a;CPU、内存、异常数、异常率…

51.网页设计规则#1_字体设计

一些概念 字体排版 排版是安排字体的艺术和技术&#xff0c;以使书面语言在显示时清晰、可读和吸引人。&#xff08;来自维基百科翻译&#xff09; serif字体和sans-serif字体 serif字体 ● 创造一个传统/经典的外观和感觉 ● 体现出可信度 ● 适合长文本 sans-serif字体 …

【JavaScript】7.DOM的操作元素

DOM 的操作元素 JavaScript 的 DOM 操作可以改变网页内容、结构和样式&#xff0c;我们可以利用 DOM 操作元素来改变元素里面的内容 、属性等 1. 改变元素内容 element.innerText&#xff1a;从起始位置到终止位置的内容, 但它去除 html 标签&#xff0c; 同时空格和换行也会…

Pytorch深度学习笔记(十)多分类问题

课程推荐&#xff1a;09.多分类问题_哔哩哔哩_bilibili 目录 1. 多分类模型 2. softmax函数模型 3. Loss损失函数 4.实战MNIST Dataset 之前&#xff0c;在逻辑斯蒂回归中我们提到了二分类任务&#xff0c;现在我们讨论多分类问题。 1. 多分类模型 与二分类不同的是多分…

基于C#asp.net心里咨询服务网站系统

功能模块&#xff1a; 主要分为管理员和注册用户&#xff0c;注册用户可以查看所有人发布的心里文章&#xff0c;情感在线问答&#xff0c;查询相似问题&#xff0c;以及进入论坛进行交流&#xff08;发帖跟帖评论收藏等&#xff09;后台管理主要是针对个人信息修改 管理员对注…

SpringBoot自动装配机制的原理

自动装配 简单来说&#xff0c;就是自动去把第三方组件的Bean装载到IOC容器里面。不需要开发人员再去写Bean相关的一个配置。 在SpringBoot应用里面&#xff0c;只需要在启动类上去加上SpringBootApplication注解就可以实现自动配置&#xff0c;SpringBootApplication注解它是…

DSPC174 3BSE005461R1码垛工业机器人安装调试的13个步骤

​ DSPC174 3BSE005461R1码垛工业机器人安装调试的13个步骤 ABB码垛工业机器人安装调试的13个步骤 最近工业机器人市场上&#xff0c;调试工作比较火爆&#xff0c;单个项目动辄几十台机器人同时调试&#xff0c;开出的日薪达到1500-2000元。拥有如此庞大的市场需求和丰厚收入…

Hudi数据湖技术之核心概念

目录 1 基本概念1.1 时间轴Timeline1.2 文件管理1.3 索引Index 2 存储类型2.1 计算模型2.1.1 批式模型&#xff08;Batch&#xff09;2.1.2 流式模型&#xff08;Stream&#xff09;2.1.3 增量模型&#xff08;Incremental&#xff09; 2.2 查询类型&#xff08;Query Type&…

力扣:通过《84.柱状图中最大的矩形》求解《85. 最大矩形》

84. 柱状图中最大的矩形 85. 最大矩形 84.柱状图中最大的矩形&#xff1a; 单调栈求解问题范围&#xff1a; 输出每个数左边第一个比它小的数 单调栈例题&#xff1a; Acwing 830. 单调栈 #include <iostream>using namespace std;const int N 100010; int stk[N],tt …