根据维基百科的定义:

  插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。

  归并排序进行如下迭代操作:首先将原始序列看成N个只包含1个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下1个有序的序列。

  现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?

输入格式:

  输入在第一行给出正整数N (<=100);随后一行给出原始序列的N个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。

输出格式:

  首先在第1行中输出“Insertion Sort”表示插入排序、或“Merge Sort”表示归并排序;然后在第2行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行末不得有多余空格。

输入样例1:

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

输出样例1:

Insertion Sort
1 2 3 5 7 8 9 4 6 0

输入样例2:

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

输出样例2:

Merge Sort
1 2 3 8 4 5 7 9 0 6

python源码实现:

 # 模块化处理
"""
1,输入模块
2,直接插入排序判决
3,并归排序判决
4,输出
""" def input_data(): # 输入模块
d0 = int(input())
d1 = [int(x) for x in input().split()]
d2 = [int(x) for x in input().split()]
return d0, d1, d2 def dis_single(data, d0): # 逐位进行插入sort
state = 1
for i in range(len(data)):
if d0 < data[i]:
data.insert(i, d0)
state = 0
break
if state:
data.append(d0)
return data def dis_sentence(d1, d2): # 插入排序判决
data = []
state = 0
for i in range(len(d1)):
data = dis_single(data, d1[i])
d_mid = data.copy()
d_mid.extend(d1[len(d_mid):])
if d_mid == d2:
# print('Insertion Sort')
state = 1
data = dis_single(data, d1[i + 1])
d_mid = data.copy()
d_mid.extend(d1[len(d_mid):])
break
return [state, d_mid] def list_sort(d0, d1): # 两个数组进行排序合并
index = 0
for i in range(len(d1)): # 遍历d1数组
state = 1
for j in range(index, len(d0)): # 遍历d0数组
if d0[j] > d1[i]:
state = 0
index = j + 1
d0.insert(j, d1[i])
break
if state == 1: # 如果大于d0这个队列的所有值,那么直接extend所有数据
d0.extend(d1[i:])
break
return d0 def ms_sentence(d1, d2): # 并归排序判决
data = [[x] for x in d1]
state = 0
while len(data) != 1: # 循环条件
length = len(data)
half = int(length / 2) # 除2的整数部分
quo = length % 2 # 除2的商
d0_mid = []
for i in range(half):
d0_mid.append(list_sort(data[i * 2], data[i * 2 + 1]))
if quo:
d0_mid.append(data[-1])
data = d0_mid.copy()
d0_mid = []
for i in data:
for j in i:
d0_mid.append(j) if d0_mid == d2:
state = 1
if state:
break
return [state, d0_mid] def str_out(d0, d1): # 按格式进行输出
if d0[0]:
print('Insertion Sort')
str_ = str(d0[1][0])
for i in d0[1][1:]:
str_ += ' ' + str(i)
print(str_)
if d1[0]:
print('Merge Sort')
str_ = str(d1[1][0])
for i in d1[1][1:]:
str_ += ' ' + str(i)
print(str_) if __name__ == "__main__":
d0, d1, d2 = input_data()
# d1 = [int(x) for x in '3 1 2 8 7 5 9 4 6 0'.split()]
# d2 = [int(x) for x in '1 2 3 7 8 5 9 4 6 0'.split()] d3_1 = dis_sentence(d1, d2)
d3_2 = ms_sentence(d1, d2)
# print(d3_1, d3_2) str_out(d3_1, d3_2)

插入与归并(python)(原创)的更多相关文章

  1. PAT-乙级-1035. 插入与归并(25)

    1035. 插入与归并(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 根据维基百科的定义: 插入排序是迭 ...

  2. PAT 1035 插入与归并(25)(代码+思路+测试点分析)

    1035 插入与归并(25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到 ...

  3. 【算法笔记】B1035 插入与归并

    1035 插入与归并 (25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直 ...

  4. PAT (Basic Level) Practise (中文)-1035. 插入与归并(25)

    PAT (Basic Level) Practise (中文)-1035. 插入与归并(25)   http://www.patest.cn/contests/pat-b-practise/1035 ...

  5. PAT(B) 1035 插入与归并(Java)

    题目链接:1035 插入与归并 (25 point(s)) 参考博客:PAT乙级--1035(插入排序和归并)java实现熊仙森 题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据, ...

  6. P 1035 插入与归并

    转跳点 :

  7. 左神算法第一节课:复杂度、排序(冒泡、选择、插入、归并)、小和问题和逆序对问题、对数器和递归(Master公式)

    第一节课 复杂度 排序(冒泡.选择.插入.归并) 小和问题和逆序对问题 对数器 递归 1.  复杂度 认识时间复杂度常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数 ...

  8. PAT 1035. 插入与归并(25)

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

  9. PAT B1035 插入与归并 (25 分)

    根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...

随机推荐

  1. unity3d优化-代码篇(不定期更新)

    1.Update 大多数情况是需要在update中处理很多逻辑的,然而unity3d底层是c/c++编写,逻辑层是c#,通过monobehaviour挂载于对象中,实现一些unity3d接口的重载. ...

  2. Python OpenCV 图像相识度对比

    强大的openCV能做什么我就不啰嗦,你能想到的一切图像+视频处理. 这里,我们说说openCV的图像相似度对比, 嗯,说好听一点那叫图像识别,但严格讲, 图像识别是在一个图片中进行类聚处理,比如图片 ...

  3. swagger结合dubbo的rest服务测试

    swagger结合dubbo的rest服务测试 背景介绍 我们应用的dubbo服务导出,可能没有直接的触发点去发起调用测试,除非自己手写controller和test类,缺乏一个动态工具,类似流行的s ...

  4. IMCASH:卖掉了比特币回老家生活的现在怎么样了?

    2012年大学毕业后,我不经意间接触到了比特币,抱着本人对新鲜事物的好奇心和知乎上的一些流言蜚语,我把一部分上学时期辛苦兼职赚的钱换成了比特币,当时真的觉得自己中了邪,不知道为什么会入这个坑. 比特币 ...

  5. iOS键盘事件实现、控制

    记录于2013/6/26:   一.点击键盘上的“Done”按钮关闭键盘 1.视图控制器实现UITextFieldDelegate协议 2.设置文本框属性      textField.returnK ...

  6. Vue 随机分配的打扫卫生H5 :打扫让我快乐

    情况是这样子的,每周四是我们小组打扫卫生,一共有四件活,7个人分配. 活分别是 : 扫地 拖地 倒垃圾 擦桌子 人分别是: '军', '春', '龙', '东', '贤', '磊','卿' 但是,每次 ...

  7. JS for循环 if判断、white循环。小练习

    1----输入正整数n,求1-n的和. var n=prompt("请输入一个正整数"); var sum=0; for (var i=1;i<=n;i++) { sum=s ...

  8. PyQt4转换ui为py文件需添加如下代码才可执行

    1)转换ui为py 命令行进入ui文件所在文件夹,输入pyuic4 ui_name.ui > py_name.py即可 或新建ui2py.bat文件,写入: @echo off @cd /d & ...

  9. Linux进阶命令用法

    1.tr命令 可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete:删除所有属 ...

  10. 上传插件webupload之调用拍照兼容问题

    在项目中,移动端用到了webupload插件来实现上传功能(我觉得这个插件挺好用的,所以无论pc还是移动端我都使用了这个插件来做上传功能) 在移动端要调起拍照功能,实现上传,须得在webuploade ...