【数据结构实验】排序(一)冒泡排序改进算法 Bubble及其性能分析

文章目录

  • 1. 引言
  • 2. 冒泡排序算法原理
    • 2.1 传统冒泡排序
    • 2.2 改进的冒泡排序
  • 3. 实验内容
    • 3.1 实验题目
      • (一)输入要求
      • (二)输出要求
    • 3.2 算法实现
  • 4. 实验结果
  • 5. 实验结论

1. 引言

  排序算法是计算机科学中一个重要而基础的研究领域,不同的排序算法在不同场景下有着不同的优劣势。冒泡排序是最简单直观的排序算法之一,其核心思想是通过反复交换相邻元素,将未按次序排列的元素移到正确位置。本文将着重介绍改进的冒泡排序算法,探讨其原理、实现细节以及在不同情境下的性能表现。

2. 冒泡排序算法原理

2.1 传统冒泡排序

  冒泡排序的基本思想是通过反复比较相邻的两个元素,并将较大的元素交换到右侧,逐步将最大的元素移到最右端。这个过程类似于气泡上浮,因此得名冒泡排序,其ADL语言表示如下:
在这里插入图片描述

2.2 改进的冒泡排序

  改进的冒泡排序在传统冒泡排序的基础上,通过记录每一趟排序中最后一次交换的位置,减少了比较的次数。这一改进可以提高算法的效率,特别是在序列基本有序的情况下,其ADL语言表示如下:在这里插入图片描述

3. 实验内容

3.1 实验题目

实现冒泡排序改进算法 Bubble.

(一)输入要求

第一组输入数据:
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
第二组输入数据:
{20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}
第三组输入数据:
{1,2,3,4,5,8,7,6,9,10,11,18,13,14,15,16,17,12,19,20}
第四组输入数据:
{1,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,20}

(二)输出要求

对每组输入数据,输出以下信息(要求必须要有关于输出数据的明确的提示信息)

  1. 输出冒泡的总趟数;
  2. 输出每趟冒泡的记录区间;
  3. 输出每趟冒泡关键词的比较次数和记录移动次数;
  4. 输出整个排序过程总的关键词比较次数和总的记录移动次数

3.2 算法实现

#include <stdio.h>
#include <stdlib.h>void Bubble(int R[20],int n){int bound,i,j,t,e,Compare=0,Move=0,times=0;bound=n;while(bound){int compare=0,move=0;t=0;for(j=0;j<bound-1;j++){if(R[j]>R[j+1]){compare++;e=R[j];R[j]=R[j+1];R[j+1]=e;t=j;}move++;}times++;printf("该趟冒泡的记录区间为:0—%d",bound);printf("\n关键词比较次数是%d,记录移动次数是%d\n",compare,move);bound=t;Compare+=compare;Move+=move;}printf("冒泡的总趟数:%d\n",times);printf("关键词的总比较次数是%d,总的记录移动次数是%d\n",Compare,Move);
}
int main(){int i;//int R[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};//int R[20]={20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};int R[20]={1,2,3,4,5,8,7,6,9,10,11,18,13,14,15,16,17,12,19,20};//int R[20]={1,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18,20};Bubble(R,20);for(i=0;i<20;i++)printf("%d ",R[i]);return 0;
}

4. 实验结果

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

5. 实验结论

  改进的冒泡排序算法通过记录最后一次交换的位置来减少比较次数,提高了算法在某些情境下的性能。然而,需要注意的是,冒泡排序仍然是一种简单的排序算法,其平均时间复杂度为 O ( n 2 ) O(n^2) O(n2),对于大规模数据集可能不如快速排序等高级排序算法效率高。

  在实际应用中,选择排序算法应该根据具体情况来决定。改进的冒泡排序适用于某些特殊情境,但对于大规模数据集,更高效的排序算法可能更为合适。在实际场景中,综合考虑算法的时间复杂度、空间复杂度以及数据分布等因素,选择合适的排序算法是至关重要的。

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

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

相关文章

AndroidStudio2022.3.1 Patch3使用国内下载源加速

记录一下这个版本的as在使用国内下载源加速碰到的诸多问题。 一、gradle-8.0-bin.zip下载慢 编辑项目文件夹/gradle/wrapper/gradle-wrapper.properties&#xff0c;文件内容改为如下&#xff1a; #Fri Nov 24 18:50:06 CST 2023 distributionBaseGRADLE_USER_HOME distribu…

井盖位移传感器怎么监测井盖安全

井盖在城市基础设施建设中扮演着不可或缺的角色&#xff0c;虽然看似并不起眼但确实是城市规划中一个重要的组成部分。在城市规划建设之初都需要首先考虑排水系统的设计&#xff0c;而井盖作为排水系统的一个重要组成部分&#xff0c;一旦出现问题便会造成交通中断或者环境受影…

CSS-元素的分类与特性

块元素&#xff08;block&#xff09; 又称&#xff1a;块级元素 特点&#xff1a; 在页面中独占一行&#xff0c;不会与任何元素共用一行&#xff0c;是从上到下排列的默认宽度&#xff1a;撑满父元素默认高度&#xff1a;由内容撑开可以通过 CSS 设置宽高 人话&#xff1a;宽…

天线的负载

在电磁学和通信工程领域&#xff0c;天线的负载&#xff08;Load&#xff09;通常指连接到天线的部分或元件&#xff0c;该部分在电学上对天线的输入产生影响。天线的负载可以是被连接到天线的阻抗元件、电感、电容、电阻或其他电性元件。 具体而言&#xff0c;天线的负载是指…

【电源专题】在DC/DC电源电感下方铺铜的利弊?

对 DC/DC 电源的电感底部是否应该铺铜这个问题,硬件工程师们常常意见分歧。 一种观点认为,在电感下方铺铜会在接地面上产生涡流;涡流会影响功率电感的电感量并增加系统损耗,而接地面噪声会影响其他高速信号。 另一种观点则认为,完整的铜平面可以降低 EMI 并改善散热特性。…

递归方法来计算二叉树的双分支节点个数

1.递归方法来计算二叉树的双分支节点个数 首先&#xff0c;你需要定义二叉树的节点结构&#xff0c;然后编写递归函数 #include <stdio.h> #include <stdlib.h>// 定义二叉树的节点结构 struct TreeNode {int value;struct TreeNode* left;struct TreeNode* righ…

1panel可视化Docker面板安装与使用

官网地址1Panel - 现代化、开源的 Linux 服务器运维管理面板 文章目录 目录 文章目录 前言 一、环境准备 二、使用步骤 1.安装命令 2.一些命令 3.使用 总结 前言 一、环境准备 虚拟机centos 已经安装好docker和 Docker Compose 或者都没安装 1panel会帮你自动安装 二、使用…

【腾讯云云上实验室】向量数据库相亲社交应用实践

快速入口 &#x1f449;向量数据库_大模型知识库_向量数据存储_向量数据检索- 腾讯云 (tencent.com) 文章目录 前言1. 向量数据库概念及原理1.1 向量数据库概念1.2 向量数据库核心原理1.3 向量数据库优缺点1.4 向量数据库与传统数据库的区别 2. 腾讯云向量数据库的基本特性及优…

Linux学习笔记之六(进程之间的管道通信和信号处理)

目录 1、管道通信1.1、无名管道1.1、有名管道 2、信号处理2.1、信号的种类和发送2.2、信号的接受和处理 1、管道通信 管道通信是一个设备中进程与进程之间通信的一种方式&#xff0c;分为无名管道和有名管道两种。前者只能用于有亲缘关系的进程之间的通信&#xff0c;如父子进…

Proteus仿真--用DS1302与12864LCD设计的可调式中文电子日历

本文主要介绍用DS1302和12864 LCD的可调式中文电子日历&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 其中12864LCD上面显示中文年月日信息时间信息&#xff0c;按键K1-K4&#xff0c;K1用于年月日时分选择&#xff0c;K2用于加功能&#xff0c;K3用于…

CSIT883系统分析与项目管理——Lecture1重点概念

一、前言 这个是本人的学习笔记,如果大家喜欢可以多多关注吧! 二、重点概念 1.第一个核心过程不是计划项目。 解释: SDLC包括构建、启动和维护信息所需的所有活动 系统六个核心流程是: 1.识别问题或需求并获得批准 2.计划和监督项目,即什么、如何以及谁 3.发现并了解问…

数组名的理解

1.引入 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]&#xff1b; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;⽽且是数组⾸元素的地址&#xff0c;我们来做个测试。 #include <stdio.…

CSS水平居中与垂直居中的方法

当我们页面布局的时候&#xff0c;通常需要把某一个元素居中&#xff0c;这一篇文章为大家介绍一下居中的几种方法&#xff0c;本人文笔有限&#xff0c;请见谅&#xff01; 一.水平居中 行内元素水平居中的方法&#xff0c;我们使用text-align:center; <!DOCTYPE html&g…

夜神模拟器 burp抓包 ADB 微信小程序

夜神模拟器 burp抓包 ADB 微信小程序 初始环境准备应用连接证书转换设置夜神模拟器环境ADB配置测试burp抓包 初始环境准备 既然想了解如何抓包&#xff0c;我想大多数是已经安装好 夜神模拟器 和 Burp 了&#xff0c;这里就不在赘述&#xff0c;直接开始操作。 openssl 的下载…

3. 加载器与加载连接用户程序

加载器与加载连接用户程序 加载器创建用户程序的呆子内核用户程序 加载器加载32位呆子内核 ;MBR本身占用512字节,起始地址0x7c00 ;GDT的位置:0x7c000x200(512) 0x7e00 ;GDT的界限:2的16次方:2^1664k0x10000 ;因此启动程序的位置放在: 0x7e000x10000 0x17e00 ;启动程序所在的…

module java.base does not “opens java.io“ to unnamed module

环境 如上图所示&#xff0c; Runtime version的版本是JAVA 17 项目所需要JDK版本为JAVA 8 解决

Alibaba Cloud Linux 3安装Docker

进行docker安装&#xff08;以社区版为例&#xff09; 添加docker-ce的dnf源 dnf config-manager --add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.安装Alibaba Cloud Linux 3专用的dnf源兼容插件 dnf -y install dnf-plugin-releasever-adap…

⑦【Redis GEO 】Redis常用数据类型:GEO [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis GEO ⑦Redis GEO 基本操作命令1.geoadd …

Ubuntu系统安装docker

1.检查是否安装老版本 检查卸载老版本docker ubuntu下自带了docker的库&#xff0c;不需要添加新的源。 但是ubuntu自带的docker版本太低&#xff0c;需要先卸载旧的再安装新的。 apt-get remove docker docker-engine docker.io containerd runc 如果不能正常卸载&#x…

如何通过 Al 的能力提升编程的效率?

通过人工智能&#xff08;AI&#xff09;的技术&#xff0c;可以提升编程效率和能力。以下是一些建议和方法&#xff1a; 代码自动生成&#xff1a;使用AI技术&#xff0c;可以根据程序员的需求和输入&#xff0c;自动生成代码。这可以提高编程效率&#xff0c;减少编写代码所需…