当前位置: 首页 > news >正文

数据结构第16周 :( 希尔排序+ 堆排序 + 快速排序 )

目录

  • 希尔排序
  • 堆排序
  • 快速排序

希尔排序

【问题描述】给出一组数据,请用希尔排序将其按照从小到大的顺序排列好。

【输入形式】原始数据,以0作为输入的结束;第二行是增量的值,都只有3个。

【输出形式】每一趟增量排序后的结果

【样例输入】

8 3 6 1 68 12 19 3 1 0

5 3 1

【样例输出】

8 3 3 1 68 12 19 6 1
1 3 1 8 6 3 19 68 12
1 1 3 3 6 8 12 19 68

【样例输入】

5 3 9 8 2 4 1 7 10 6 0

4 2 1

【样例输出】

2 3 1 7 5 4 9 8 10 6
1 3 2 4 5 6 9 7 10 8
1 2 3 4 5 6 7 8 9 10

#include<iostream>
using namespace std;void ShellSort(int a[], int ick, int limit)
{int i, j;for(i = ick; i < limit; i ++){int temp = a[i];for(j = i - ick; j >= 0 && temp < a[j]; j -= ick){a[j + ick] = a[j];}a[j + ick] = temp;}for(i = 0; i < limit; i ++){cout<<a[i]<<" ";}cout<<endl;
}
int main()
{int a[50];int cnt = 0;for(cnt = 0; ;cnt ++){cin>>a[cnt];if(a[cnt] == 0) break;}int ick[10];int i = 0;while(cin>>ick[i]){i ++;}int j = 0;while(1){ShellSort(a, ick[j], cnt); //cnt取不到j ++;if(j == i) break;}return 0;
}

堆排序

【问题描述】请用堆排序的方法对一组数据进行排序,并给出建堆以及每一趟堆排序的结果。
【输入形式】一组数据,以0作为输入的结束。
【输出形式】建大根堆的结果,以及每一趟堆排序的结果。
【样例输入】

8 3 6 1 68 12 0

【样例输出】

68 8 12 1 3 6
12 8 6 1 3 68
8 3 6 1 12 68
6 3 1 8 12 68
3 1 6 8 12 68
1 3 6 8 12 68

【样例输入】

12 9 26 11 38 52 99 27 66 15 32 0

【样例输出】

99 66 52 27 38 12 26 9 11 15 32
66 38 52 27 32 12 26 9 11 15 99
52 38 26 27 32 12 15 9 11 66 99
38 32 26 27 11 12 15 9 52 66 99
32 27 26 9 11 12 15 38 52 66 99
27 15 26 9 11 12 32 38 52 66 99
26 15 12 9 11 27 32 38 52 66 99
15 11 12 9 26 27 32 38 52 66 99
12 11 9 15 26 27 32 38 52 66 99
11 9 12 15 26 27 32 38 52 66 99
9 11 12 15 26 27 32 38 52 66 99

#include<iostream>
using namespace std;int a[30];
int limit = 0; //limit为数组最后一个元素下标void Sift(int pos, int edge = limit)
{while(1){if(2 * pos + 2 <= edge){if(a[pos] > a[2 * pos + 1] && a[pos] > a[2 * pos + 2])break;if(a[pos * 2 + 1] < a[pos * 2 + 2]){swap(a[pos], a[pos * 2 + 2]);pos = pos * 2 + 2;continue;}else{swap(a[pos], a[pos * 2 + 1]);pos = pos * 2 + 1;continue;}}else if(2 * pos + 1 <= edge){if(a[pos] < a[pos * 2 + 1]){swap(a[pos], a[pos * 2 + 1]);pos = pos * 2 + 1;continue;}}if(2 * pos + 2 > edge ) break;}
}void HeapSort() //堆排序,limit可取,建立大根堆
{//建堆时,要将数据初始化成一个大根堆int i = 0;for(i = (limit - 1) / 2; i >= 0; i --) //初次建堆{if(i * 2 + 2 <= limit){if(a[i] < a[i * 2 + 1] || a[i] < a[i * 2 + 2]){if(a[i * 2 + 1] < a[i * 2 + 2]){swap(a[i], a[i * 2 + 2]);Sift(i * 2 + 2);}else{swap(a[i], a[i * 2 + 1]);Sift(i * 2 + 1);}}}else if(i * 2 + 1 <= limit){if(a[i] < a[i * 2 + 1]){swap(a[i], a[i * 2 + 1]);Sift(i * 2 + 1);}}}for(i  = 0; i <= limit; i ++) //输出第一次建堆后的结果{cout<<a[i]<<" ";}cout<<endl;for(i = limit; i > 0; i --){swap(a[i], a[0]);Sift(0, i - 1);int j;for(j = 0; j <= limit; j ++){cout<<a[j]<<" ";}cout<<endl;}
}
int main()
{int i = 0;for(i = 0; ; i ++){cin>>a[i];if(a[i] == 0)break;}limit = i - 1;HeapSort();return 0;
}

快速排序

【问题描述】输入一组数据,以0作为输入的结束,分别采用冒泡排序、选择排序、快速排序的方法,对其进行从小到大的排序,给出排序后的结果。

【输入形式】一组数据,以0作为输入的结束

【输出形式】三种排序后的结果

【样例输入】

9 8 4 5 7 2 10 6 0
【样例输出】

2 4 5 6 7 8 9 10

2 4 5 6 7 8 9 10

2 4 5 6 7 8 9 10

#include<iostream>
using namespace std;void PopSort(int a[], int limit)
{int i, j;for(i = limit - 1; i > 0; i --) //i 从最后一个元素取{int flag = 1;for(j = 0; j < i; j ++) //j只能取到i的前一位,因为还有j + 1{if(a[j] > a[j + 1]){int temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;flag = 0;}}if(flag) break;}for(i = 0; i < limit; i ++){cout<<a[i]<<" ";}cout<<endl;
}void QSort(int a[], int left, int right, int limit)
{while(left < right) //中间轴值就是a[left]{while(left < right && a[left] <= a[right]){right --;}swap(a[left], a[right]); // 轴值换成了a[right]while(left < right && a[left] <= a[right]){left ++;}swap(a[left], a[right]);}int i = 0;for(i = 0; i <limit; i ++){cout<<a[i]<<" ";}cout<<endl;
}void SelectSort(int a[], int limit)
{int i, j, k;for(i = 0; i < limit - 1; i ++){k = i;for(j = i + 1; j < limit; j ++){if(a[j] < a[k])k = j;}if(k != i)swap(a[i], a[k]);}for(i = 0; i < limit; i ++){cout<<a[i]<<" ";}cout<<endl;
}int main()
{int limit = 0;int a[20];for(limit = 0; ; limit ++){cin>>a[limit];if(a[limit] == 0) break;}PopSort(a, limit);SelectSort(a, limit);QSort(a, 0, limit - 1, limit);return 0;
}

相关文章:

数据结构第16周 :( 希尔排序+ 堆排序 + 快速排序 )

目录希尔排序堆排序快速排序希尔排序 【问题描述】给出一组数据&#xff0c;请用希尔排序将其按照从小到大的顺序排列好。 【输入形式】原始数据&#xff0c;以0作为输入的结束&#xff1b;第二行是增量的值&#xff0c;都只有3个。 【输出形式】每一趟增量排序后的结果 【…...

【C++】类和对象

1.面向过程和面向对象初步认识 我们知道&#xff0c;C语言是面向过程的&#xff0c;关注的就是问题解决的过程&#xff1b; C是面向过程和面向对象混编&#xff0c;因为C兼容了C语言&#xff0c;而面向对象关注的不再是问题解决的过程&#xff1b; 而是一件事情所关联的不同…...

Java缓存面试题——Redis应用

文章目录1、为什么要使用Redis做缓存&#xff1f;2、为什么Redis单线程模型效率也能那么高&#xff1f;3、Redis6.0为什么要引入多线程呢&#xff1f;4、Redis常见数据结构以及使用场景字符串&#xff08;String&#xff09;哈希(Hash)列表&#xff08;list&#xff09;集合&am…...

KMP算法详细理解

一、目的1.KMP应用场景&#xff1a;可以解决字符串匹配问题&#xff1b; 在一个串中查找是否出现过另一个串。2.KMP的经典思想就是:当出现字符串不匹配时&#xff0c;可以记录一部分之前已经匹配的文本内容&#xff0c;利用这些信息避免从头再去做匹配。3.KMP算法关键在于&…...

RabbitMQ单节点安装

在学习RabbitMQ之前&#xff0c;必须要把RabbitMQ的环境搭建起来&#xff0c;刚开始学习时&#xff0c;搭建单节点是入门RabbitMQ最方便、最快捷的方式&#xff0c;这篇文章就是介绍如何使用RabbitMQ压缩包的方式搭建一个单节点的RabbitMQ。 在实际项目中&#xff0c;服务器都…...

tomcat 服务的目录结构和tomcat的运行模式

目录 一、tomcat 服务的目录结构解析&#xff1a; 1、tomcat目录结构&#xff1a; bin目录&#xff1a; conf目录&#xff1a; lib目录&#xff1a; logs目录&#xff1a; temp目录&#xff1a; webapps目录&#xff1a; wokr目录&#xff1a; 二、tomcat服务的运行模…...

vector迭代器失效问题

一、迭代器&#xff1a; 迭代器的主要作用就是让算法能够不用关心底层数据结构&#xff0c;其底层实际就是一个指针&#xff0c;或者是对指针进行了封装&#xff0c;比如&#xff1a;vector的迭代器就是原生态指针T* 。因此迭代器失效&#xff0c;实际就是迭代器底层对应指针所…...

2023年排名前茅的十大饭店装修设计!

相信大家都是知道的&#xff0c;饭店装修设计其实是一门很深的学问&#xff0c;只有掌握这门学问才能够打造出来精美的空间&#xff0c;因此饭店装修必须要有专业餐饮设计公司的设计师进行设计。但是在国内饭店装修设计公司那么多&#xff0c;饭店老板要如何选择呢&#xff1f;…...

MFCCA多通道多说话人语音识别模型上线魔搭(ModelScope)

实验室研发的基于多帧跨通道注意力机制&#xff08;MFCCA&#xff09;的多说话人语音识别模型近日上线魔搭&#xff08;ModelScope&#xff09;社区&#xff0c;该模型在AliMeeting会议数据集上获得当前最优性能。欢迎大家下载。开发者可以基于此模型进一步利用ModelScope的微调…...

刷题记录:牛客NC25078[USACO 2007 Ope S]City Horizon

传送门:牛客 题目描述: Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at the city horizon and observe the beautiful silhouettes formed by the rectangular buildings. The entire horizon is represented by a number line …...

【Java|golang】 1238. 循环码排列---格雷编码

给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,…,2^n-1) 的排列 p&#xff0c;并且满足&#xff1a; p[0] start p[i] 和 p[i1] 的二进制表示形式只有一位不同 p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同 示例 1&#xff1a; 输入&#xff1a;n 2, start …...

Python自动化测试框架封装和调用

封装与调用函数与参数化前言 面实现了参数的关联&#xff0c;那种只是记流水账的完成功能&#xff0c;不便于维护&#xff0c;也没什么可读性&#xff0c;接下来这篇可以把每一个动作写成一个函数&#xff0c;这样更方便了。参数化的思维只需记住一点&#xff1a;不要写死 登录…...

线程的执行

承接上文CPU原理简介程序的执行是由控制器发信号推动整个程序一步一步向前走&#xff0c;将数据存储在寄存器&#xff0c;从程序计数器中获取指令&#xff0c;比如先把3放到寄存器&#xff0c;再把5放到寄存器&#xff0c;再做一个加法&#xff0c;加法就是一个指令&#xff0c…...

【视频】海康摄像头、NVR网络协议简介

1、软硬件整体架构 2、涉及的网络协议 3、协议简介 3.1 海康私有协议 设备发现SADP:进行设备的发现、激活、修改网络参数、忘记密码等; SDK:4200、系统平台的接入前端设备,协议不对外开放,但对外提供接口库; ISAPI:Intelligent Security API(智能安全API),基于HTTP传输…...

【Spring的事务传播行为有哪些呢?Spring事务的隔离级别?讲下嵌套事务?】

如果你想寻求一份与后端相关的开发工作&#xff0c;那么关于Spring事务相关的面试题你就不能说不会并且不能不知道&#xff1f; 人生如棋&#xff0c;我愿为卒&#xff0c;行动虽慢&#xff0c;可谁曾见我后退一步&#xff1f; 一.Spring中声明事务的方式 1.1 编程式事务 编程…...

其实一点不难学会这三步一定让你学会制作一个『3D建模』大屏

上次已经教过大家怎样制作一个简单的2D数据可视化大屏~那有一些朋友们就会说那些炫酷的3D可视化大屏是怎样制作的呢&#xff1f;这不就来了&#xff0c;今天就教大家怎样用山海鲸可视化软件制作一个带3D建模的可视化大屏&#xff0c;并且最重要的是无需会特别复杂的3D建模知识。…...

【C++】C++的内存模型之四大分区

程序的内存模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值&…...

Vue跨级通信(重点)

当不使用Vuex的前提下&#xff0c;子孙传递就得使用另外一种办法&#xff1a;provide 和 inject 总结&#xff1a;provide / inject 类似于消息的订阅和发布。- inject接收数据。- provide提供或发送数据&#xff0c;&#xff08;1&#xff09;provide&#xff08;name&#xf…...

支付系统中的设计模式07:责任链模式

最近公司业务的发展果然如老板当初所画(预)饼(言)的那样红(恍)红(恍)火(惚)火(惚),蒸蒸日上,每天的流水都在不断攀升到新的高度,有不少人都从公司开发的电商平台挣到了钱。 不过问题也接着来了——运营部门经过老板的同意,也学着产品经理提出了下面几项非常合理…...

期末综合考试

一、概率论1、全概率公式、贝叶斯公式应用2、期望、方差、协方差的定义以及性质证明(1) 期望(2) 方差(3) 协方差二、数理统计1、参数估计(1) 矩估计(2) 最大似然估计(3) 综合例题一、概率论 1、全概率公式、贝叶斯公式应用 记住标黄的两段&#xff0c;上考场直接套数据&#x…...

信通院:AI4SE行业现状调查报告 2026

这份信通院 2026 年 AI4SE 行业现状调查报告&#xff0c;核心是 AI 与软件工程深度融合进入规模化落地关键期&#xff0c;全流程提效显著&#xff0c;企业高度重视&#xff0c;但仍面临人才、成本等挑战&#xff0c;未来将走向自主编程、多智能体协同的新范式。一、调研概况有效…...

保姆级教程:用MS-Swift在本地电脑上跑通Qwen2.5-VL多模态大模型(附WebUI界面)

零基础玩转Qwen2.5-VL&#xff1a;手把手教你用MS-Swift搭建多模态AI实验室 想象一下&#xff0c;你的电脑不仅能理解你说的话&#xff0c;还能"看懂"你上传的照片——比如准确描述图片中的猫咪姿势&#xff0c;或者帮你分析设计稿的配色方案。这就是Qwen2.5-VL多模态…...

PanSearch网盘影视资源搜索聚合工具源码解析:集成多引擎搜索技术,畅享跨平台资源检索

在数字化信息爆炸的时代&#xff0c;影视资源的获取方式日益多样化&#xff0c;但如何在海量资源中快速定位所需内容&#xff0c;成为用户面临的一大挑战。PanSearch网盘影视资源搜索聚合工具应运而生&#xff0c;它通过集成多引擎搜索技术&#xff0c;支持百度网盘、阿里云盘等…...

大功率H桥电机驱动板电路设计方案 - ir2103驱动芯片应用方案

大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片&#xff0c;可同时驱动两路电机&#xff0c;使用10m高速光耦对控制信号进行隔离&#xff0c;最大额定电流可达100A&#xff0c;方案包括&#xff1a;硬件原理图&#xff0c;PCB(可直接打样测试)&…...

5分钟免费指南:如何将旧手机变成Linux高清摄像头

5分钟免费指南&#xff1a;如何将旧手机变成Linux高清摄像头 【免费下载链接】droidcam GNU/Linux/nix client for DroidCam 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam 想让闲置的旧手机发挥新价值吗&#xff1f;DroidCam正是你需要的开源解决方案&#xf…...

4大维度构建高可靠性加密货币自动交易系统

4大维度构建高可靠性加密货币自动交易系统 【免费下载链接】binance-trade-bot Automated cryptocurrency trading bot 项目地址: https://gitcode.com/gh_mirrors/bi/binance-trade-bot 一、价值定位&#xff1a;为什么专业交易者都在用自动化交易工具&#xff1f; 为…...

3步解决Windows苹果设备连接难题:开源工具Apple-Mobile-Drivers-Installer使用指南

3步解决Windows苹果设备连接难题&#xff1a;开源工具Apple-Mobile-Drivers-Installer使用指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址:…...

番茄小说下载解决方案:打造无缝离线阅读体验

番茄小说下载解决方案&#xff1a;打造无缝离线阅读体验 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 在数字阅读普及的今天&#xff0c;读者仍面临三大核心痛点&#xff1a…...

5分钟掌握跨平台资源下载:res-downloader智能下载器终极指南

5分钟掌握跨平台资源下载&#xff1a;res-downloader智能下载器终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是…...

HTTP3 QUIC快速重传机制解析:如何优化网络传输效率

1. HTTP3 QUIC快速重传机制的核心价值 你有没有遇到过视频卡顿、网页加载慢的问题&#xff1f;这背后往往是因为网络丢包导致的传输效率下降。HTTP3 QUIC协议的快速重传机制就是为了解决这个问题而生的。相比传统的TCP协议&#xff0c;QUIC在应对网络丢包时表现更加出色&#x…...