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

浙江大学数据结构MOOC-课后习题-第九讲-排序3 Insertion or Heap Sort

题目汇总
浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024

题目描述

在这里插入图片描述

测试点

在这里插入图片描述

思路分析

和上一题的思路一样,每进行一次迭代,来验证当前序列是否和给定的序列相同

代码展示

#include <cstdlib>
#include <iostream>
#define MAXSIZE 100
typedef int ElementType;void swap(int A[], int i, int j)
{int temp = A[i];A[i] = A[j];A[j] = temp;
}void print(int A[], int N)
{for (int i = 0; i < N; i++){if (i == 0)std::cout << A[i];elsestd::cout << ' ' << A[i];}
}
bool isSame(int A[], int input[], int N)
{for (int i = 0; i < N; i++){if (A[i] != input[i])return false;}return true;
}
bool insertion_Sort(int A[], int input[], int N)
{/* 算法 */int i, j, temp;bool flag = false;for (i = 1; i < N; i++){	temp = A[i];	/* 摸牌 */for (j = i; j > 0 && A[j - 1] > temp; j--)A[j] = A[j - 1];A[j] = temp;if (flag == true){print(A, N);return true;;}if (isSame(A, input, N)){std::cout << "Insertion Sort" << std::endl;flag = true;}}return false;
}void percDown(int A[], int p, int N)
{/* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */int parent, child;int temp = A[p];for (parent = p; (parent * 2 + 1) < N; parent = child){child = parent * 2 + 1;/* child指向左右孩子中较大者 */if (child != N - 1 && A[child] < A[child + 1])child++;if (temp > A[child]) break;else A[parent] = A[child];}A[parent] = temp;
}
void heap_Sort(int A[], int input[], int N)
{	bool flag = false;	/* 建立大根堆 */for (int i = N - 1; i >= 0; i--)percDown(A, i, N);/* 删除最大值 */for (int i = N - 1; i >= 0; i--){swap(A, 0, i);percDown(A, 0, i);if (flag == true){print(A, N);return;}if (isSame(A, input, N)){std::cout << "Heap Sort" << std::endl;flag = true;}}
}
void check(int A[], int input[], int N)
{int copyA[MAXSIZE];for (int i = 0; i < N; i++)copyA[i] = A[i];if (insertion_Sort(copyA, input, N))return;else{for (int i = 0; i < N; i++)copyA[i] = A[i];heap_Sort(copyA, input, N);return;}
}int main()
{int A[MAXSIZE];int input[MAXSIZE];int N;std::cin >> N;for (int i = 0; i < N; i++)std::cin >> A[i];for (int i = 0; i < N; i++)std::cin >> input[i];check(A, input, N);return 0;
}

相关文章:

  • git多人开发,不用merge的操作方法,阿里codeup
  • 柳宗元,政治坎坷与文学辉煌的交织
  • 多线程基本常识
  • 实现按块复制元素的进阶技巧
  • 邦芒职场:揭秘影响你职场收入的九大细节
  • 15、设计模式之责任链模式
  • java入门 springboot上传文件
  • vue3 ts问题 找不到模块“@/views/home/index.vue”或其相应的类型声明。
  • STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距
  • Python进阶:探索Python标准库和第三方库
  • hive结合Hbase实现实时数据处理和批量分析
  • 2024 年“泰迪杯”A 题:生产线的故障自动识别与人员配置--第四题(用遗传算法解决生产线排班问题--matlab代码)
  • Spark SQL 中DataFrame DSL的使用
  • http和https分别是什么?区别是什么?
  • Redis:redis基础
  • android 一些 utils
  • angular2 简述
  • C++类的相互关联
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java编程基础24——递归练习
  • java第三方包学习之lombok
  • JS学习笔记——闭包
  • markdown编辑器简评
  • 百度小程序遇到的问题
  • 从tcpdump抓包看TCP/IP协议
  • 聚类分析——Kmeans
  • 聊聊directory traversal attack
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信支付JSAPI,实测!终极方案
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #stm32整理(一)flash读写
  • (20050108)又读《平凡的世界》
  • (3)nginx 配置(nginx.conf)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (多级缓存)多级缓存
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (三)SvelteKit教程:layout 文件
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)汇编语言——简单程序
  • (算法)Game
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)EXC_BREAKPOINT僵尸错误
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net 路由处理厉害了
  • .net的socket示例
  • .NET开发人员必知的八个网站
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET正则基础之——正则委托
  • @GlobalLock注解作用与原理解析
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [C#]winform部署yolov5-onnx模型
  • [go] 迭代器模式
  • [HDOJ4911]Inversion