双向冒泡排序的数据结构实验报告

目录

实验目的:

实验内容(实验题目与说明)

算法设计(核心代码或全部代码)

运行与测试(测试数据和实验结果分析)

总结与心得:


  • 实验目的:

  1. 理解双向冒泡排序算法的原理和基本思路。
  2. 熟悉双向冒泡排序在实际应用中的场景和优化方法。
  • 实验内容(实验题目与说明)

编写一个双向冒泡排序算法,即在排序过程中以交替的正、反两个方向进行遍历。若第一趟把关键字最大的记录放到最末尾,则第二趟把关键字最小的记录放到最前端,如此反复进行之。

  • 算法设计(核心代码或全部代码)

#include <stdio.h>

#define max 10

 

void cocktailSort(int arr[], int size) {

    int left = 0;

    int right = size - 1;

    while (left < right) {

        int i, j;

        for (i = left; i < right; i++) { // 从左到右进行比较和交换

            if (arr[i] > arr[i + 1]) {

                int temp = arr[i];

                arr[i] = arr[i + 1];

                arr[i + 1] = temp;

            }

        }

        right--;

 

        for (j = right; j > left; j--) { // 从右到左进行比较和交换

            if (arr[j] < arr[j - 1]) {

                int temp = arr[j];

                arr[j] = arr[j - 1];

                arr[j - 1] = temp;

            }

        }

        left++;

    }

}

 

int main() {

    int arr[max], i;

 

    // 输入数组元素

    printf("输入 %d 个数: ", max);

    for (i = 0; i < max; i++) {

        scanf("%d", &arr[i]);

    }

 

    // 排序

    cocktailSort(arr, max);

 

    // 输出排序后的数组

    printf("排序后的结果: ");

    for (i = 0; i < max; i++) {

        printf("%d ", arr[i]);

    }

 

    return 0;

}

 

  • 运行与测试(测试数据和实验结果分析

0984a2e0acc546b0830d561cc1c3991e.png

使用两个指针 left 和 right 来表示当前未排序部分的左边界和右边界。首先,从左到右进行一轮比较和交换,将最大的元素放到右边。然后缩小右边界 right。接下来,从右到左进行一轮比较和交换,将最小的元素放到左边。最后扩大左边界 left。重复以上步骤,直到左边界 left 大于等于右边界 right。

  • 总结与心得:

冒泡排序是交换排序中一种简单的排序方法。其基本思想是对所有相邻的关键字值进行比效,如果是逆顺(a[j]>a[j+1]),则将其交换,最终达到排序的目的。双向冒泡排序算法是对传统冒泡排序算法的一种改进,通过同时从左到右和从右到左两个方向进行比较和交换,减少了排序的轮数。在开始编写代码之前,我首先对双向冒泡排序算法的原理进行了深入的学习和理解。这包括了如何确定左右边界、两个方向的比较和交换操作等。

 

 

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

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

相关文章

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑧

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应处理&#xff0c;执行j10*x-y返回文字“j1&#xff1a;”和计算值&#xff0c;执行j(x-y)*(10⁵%7)返回文字“j2&#xff1a;”和计算值&#xff0c;执行jy*log(x10)返回文字“j3&#xff1a;”和计算值…

系统学英语 — 介词 — 千变万化

目录 文章目录 目录介词&#xff08;preposition&#xff0c;prep.&#xff09;1. in2. on3. off4. at5. outby6. for7. from8. against9. of10. into11. with12. to13. about14. since14. 其他时间介词15. 其他地点介词 介词&#xff08;preposition&#xff0c;prep.&#xf…

山西电力市场日前价格预测【2024-01-13】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-13&#xff09;山西电力市场全天平均日前电价为231.81元/MWh。其中&#xff0c;最高日前电价为345.71元/MWh&#xff0c;预计出现在00:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

node-sass@4.7.2 postinstall: `node scripts/build.js`

Can‘t find Python executable “D:\Python36\python.EXE“, you can set the PYTHON env variable.-CSDN博客 gyp ERR! build error gyp ERR! stack Error: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe failed with exit code: 1 gyp ERR! stack at Chil…

uniapp怎么开发插件并发布

今天耳机坏了,暂时内卷不了,所以想开发几个插件玩玩,也好久没写博客了,就拿这个来写了 首先,发布插件时需要你有项目 这里先拿uniapp创建一个项目, 如下,创建好的项目长这样 然后根据uniapp官网上说的,我们发布插件时,需要在uni_modules里面编写和发布 ps:还需要使用uniapp…

Mysql事务的处理

1、事务&#xff0c;就是一组命令的操作。 不过这一组命令&#xff0c;我们有时候需要使用手动提交&#xff1b; 1、使用这组命令可以查询出来现在的提交方式&#xff1a;自动提交&#xff08;就是命令输入&#xff0c;点击enter后&#xff0c;会不会直接对表格产生修改&#x…

day04打卡

day04打卡 面试题 02.07. 链表相交 时间复杂度&#xff1a;O(N)&#xff0c;空间复杂度&#xff1a;O(1) 第一想法&#xff1a;求出两个链表长度&#xff0c;走差距步&#xff0c;再遍历找有没有相交 /*** Definition for singly-linked list.* struct ListNode {* int…

一篇文章让你搞懂性能测试6大类型及其关系!

性能测试是软件测试过程的一个关键环节&#xff0c;用于确定和验证应用程序或系统在各种操作条件下的性能特征。 目标是确保软件在高负载、高压力、长时间运行以及其他非标准情况下仍能保持预期的行为和效率。 一. 性能测试的主要类型 1. 基线测试&#xff08;Baseline Test…

C++ 手写堆 || 堆模版题:堆排序

输入一个长度为 n 的整数数列&#xff0c;从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m 。 第二行包含 n 个整数&#xff0c;表示整数数列。 输出格式 共一行&#xff0c;包含 m 个整数&#xff0c;表示整数数列中前 m 小的数。 数据范围 1≤m≤n≤105 &…

js for循环与for in循环 for of循环的区别

JavaScript中&#xff0c;for循环、for...in循环和for...of循环是用于迭代数组或对象属性的不同方式。 for循环&#xff1a; for循环是最常见的迭代方法&#xff0c;它允许你指定迭代的起始点、结束条件和每次迭代后的操作。它可以用于迭代数组和字符串。 例如&#xff0c;遍…

总结:Java程序员读书清单顺序

总结&#xff1a;Java程序员读书清单顺序&#xff0c;持续更新中。。。。。。 一经验提示&#xff1a;1.零基础不建议直接看计算机专业书籍&#xff0c;建议先去看视频教程2.本书单目录用作自学顺序记录&#xff0c;也适用于有Java开发基础的同志3.看计算机书籍可以完善自己的技…

用通俗易懂的方式讲解:Stable Diffusion WebUI 从零基础到入门

本文主要介绍 Stable Diffusion WebUI 的实际操作方法&#xff0c;涵盖prompt推导、lora模型、vae模型和controlNet应用等内容&#xff0c;并给出了可操作的文生图、图生图实战示例。适合对Stable Diffusion感兴趣&#xff0c;但又对Stable Diffusion WebUI使用感到困惑的同学。…

GPUMD分子动力学模拟-学习与实践

GPUMD分子动力学模拟-学习与实践 【20220813-樊哲勇 |基于GPUMD程序包的机器学习势和分子动力学模拟】 https://www.bilibili.com/video/BV1cd4y1Z7zi?share_sourcecopy_web 纯GPU下的MD分子模型系统软件 https://github.com/brucefan1983/GPUMD 跟GPUMD对接的一些python程…

【b站咸虾米】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 三、vue语法 继续回到官…

秒懂百科,C++如此简单丨第十二天:ASCLL码

目录 必看信息 Everyday English &#x1f4dd;ASCLL码是什么&#xff1f; &#x1f4dd;ASCLL码表 &#x1f4dd;利用ASCLL码实现大写转小写 &#x1f4dd;小试牛刀 总结 必看信息 ▶本篇文章由爱编程的小芒果原创&#xff0c;未经许可&#xff0c;严禁转载。 ▶本篇文…

SECS/GEM的变量SVID是什么?JAVA SECS通信 JAVA与SECS集成资料大全JAVA开发SECS快速入门资料

Java与SECS基础通信 Java实现SECS指令S2F17获取时间 Java实现SECS指令 S10F3 终端单个显示例子 工艺配方管理S7FX Java实现SECS指令 S5F1报警/取消报警上传 实例源码及DEMO请查阅 变量可以是设备的状态信息 定义&#xff1a; 此功能允许主机查询设备数据变量&#x…

手写netty通信框架以及常见问题

目录 通信框架设计 实现功能点 通信模型 消息定义 可靠性设计 代码 服务端代码 常见netty问题 如何让netty支持百万长连接? 1. 操作系统层面优化 2. netty层面优化 2.1 设置合理线程 2.2 心跳优化 2.3 合理使用内存池 2.4 IO线程与业务线程剥离 3. JVM层面优化 …

AWS EC2的SSM配置(AWS云中的跳板机)

问题 开发人员需要访问AWS云中私有子网的数据库服务等&#xff0c;都需要通过EC2进行SSH隧道代理。这里假设本地已经有一款稳定优秀的SSH客户端工具&#xff0c;并且假设已经会熟练使用SSH的隧道代理。 1.创建EC2 搜索找到EC2服务&#xff0c;如下图&#xff1a; 点击“启动…

OAI openair3-NAS-UE-EMM代码解读(续)

文件路径openair3/NAS/UE/EMM/emm_main.c 714行之后 1.名称&#xff1a;emm_min_get_registered_plmn&#xff08;&#xff09; 获取当前注册PLMN的标识&#xff1b; 输入&#xff1a;format&#xff1a;PLMN标识符的字符串表示的请求格式&#xff1b; 输出&#xf…

Qt QSQlite数据库插入字符串中存在单个双引号或单个单引号解决方案

1. 前言 当进行数据库写入或更新时&#xff0c;有时会遇到存在字符串中包含单个双引号或者单引号。 2. 单引号和双引号""作用 在数据库中&#xff0c;字符串常量时需要用一对英文单引号或英文双引号""将字符串常量括起来。 比如&#xff1a; select * …