浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

本文主要是介绍浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

题目描述

在这里插入图片描述

测试点

在这里插入图片描述

思路分析

刚开始我打算想推出一个规律,来判断是否是归并排序,但实在太过于复杂,我很难去想出这样的规律…因此,参考了其他博主的思路——每做一次排序就和给定的序列比较一次,这样的话只需要在现有的插入和归并算法上稍作添加即可,具体可参考insertion_Sort()Merge_Sort()部分的代码

代码展示

/*
*	一遍遍执行插入排序或者归并排序
*   每次比较是否和给定的序列相同
*/
#include <cstdlib>
#include <iostream>
#define MAXSIZE 100
typedef int ElementType;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 Merge(int A[], int tempA[], int L, int R, int rightEnd)
{int leftEnd = R - 1;int length = rightEnd - L + 1;int i = L;while (L <= leftEnd && R <= rightEnd){if (A[L] < A[R])tempA[i++] = A[L++];elsetempA[i++] = A[R++];}while (L <= leftEnd)tempA[i++] = A[L++];while (R <= rightEnd)tempA[i++] = A[R++];
}void Merge_pass(int A[], int tempA[], int N, int length)
{int i = 0;for (i = 0; i <= N - 2 * length; i += 2 * length)Merge(A, tempA, i, i + length, i + 2 * length - 1);if (i + length < N)Merge(A, tempA, i, i + length, N - 1);else{for (; i < N; i++)tempA[i] = A[i];}
}bool Merge_Sort(int A[], int input[], int N)
{/* 算法 */int* tempA = (int*)malloc(N * sizeof(int));int length = 1;if (tempA != NULL){while (length < N){Merge_pass(A, tempA, N, length);length *= 2;if (isSame(tempA, input, N)){std::cout << "Merge Sort" << std::endl;Merge_pass(tempA, A, N, length);print(A, N);return true;}Merge_pass(tempA, A, N, length);length *= 2;if (isSame(A, input, N)){std::cout << "Merge Sort" << std::endl;Merge_pass(A, tempA, N, length);print(tempA, N);return true;}}free(tempA);}else std::cout << "ERROR";return false;
}void check(int A[], int input[], int N)
{int copyA[MAXSIZE];for (int i = 0; i < N; i++)copyA[i] = A[i];if (Merge_Sort(copyA, input, N))return;else{for (int i = 0; i < N; i++)copyA[i] = A[i];insertion_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;
}

心路历程

从12号开始的数据结构学习,本来给自己定的DDL是27号,但是到28号早上9:13,我只完成了28道习题,还差9道
实在是高估了自己的实力,也低估了题目的难度,重新定个DDL吧——在30号中午前完成所有题,平均每天3道题,加油加油加油,学完这个就去学操作系统啦

这篇关于浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1013036

相关文章

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序