归并排序
来源:互联网 发布:艾瑞mut监测数据 编辑:程序博客网 时间:2024/06/15 06:54
按照c代码直接改好像有点问题,而且也不怎么能看懂那个代码,所以自己按着算法原理写了python代码,运行的都正确。(不过也仅仅是参考,不是最优)
算法原理:
归并排序是对有序数列的快速排序方法,基本思想是将序列中两个或多个元素组合成有序子序列,不断归并子序列,从而形成一个有序的序列。
算法步骤:
1. 将n个记录看成是n个长度为1的有序子表
2. 将两两相邻的有序子表进行归并
3. 重复步骤2,直到归并成一个长度为n的有序表
代码:
# -*- coding: utf-8 -*-"""Created on Thu Jul 6 14:12:07 2017归并排序:归并排序是对有序数列的快速排序方法,基本思想是将序列中两个或多个元素组合成有序子序列,不断归并子序列"""list_data=[]#数据num_cnt=0#数据的个数#数据输入def data_in_func(list_data,num_cnt): print('请输入数据。') while 1: flag=input('输入数据还是退出,输入‘n’退出,其他继续!!!!') if flag=='n': return list_data,num_cnt data=input('请输入数据:') if data.isdigit(): data=int(data) list_data.append(data) num_cnt+=1 else: print('输入错误请重新输入:')#归并def merge(long): #long此次每个片段的长度 if num_cnt%long==0:#正好分完 for i in range(0,num_cnt,long):#排序次数 for j in range(1,long):#冒泡排序 for k in range(0,long-j): if list_data[i+k]>list_data[i+k+1]: list_data[i+k],list_data[i+k+1]=list_data[i+k+1],list_data[i+k] print(list_data) else: remainder=num_cnt%long num=num_cnt-remainder for i in range(0,num,long):#排序次数 for j in range(1,long):#冒泡排序 for k in range(0,long-j): if list_data[i+k]>list_data[i+k+1]: list_data[i+k],list_data[i+k+1]=list_data[i+k+1],list_data[i+k] print(list_data) for j in range(1,remainder):#冒泡排序 for k in range(0,remainder-j): if list_data[num+k]>list_data[num+k+1]: list_data[num+k],list_data[num+k+1]=list_data[num+k+1],list_data[num+k] print(list_data) #return list_data,num_cnt def merge_sort(long): while 1: merge(long) long=long*2 if long>2*num_cnt: breaklist_data,num_cnt=data_in_func(list_data,num_cnt)print(list_data,num_cnt)merge_sort(2) print(list_data,num_cnt)
结果:
第一排为输入和输入的个数,最后一排是排好序的列表和个数
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Activity、Bundle、请求码与结果码、Intent、广播、服务 (四)
- java图形验证码生成工具类及web页面校验验证码
- 热身、热身 【编程语言简介】
- swift3.0 ios10.0 友盟推送
- 利用DisplayMetrics获取屏幕信息
- 归并排序
- Android与Internet(获取资源,多线程断点下载,get/post发送,发送xml)
- 针对UITextView设置placeHolder解析
- 机器学习
- JAVA线程池shutdown和shutdownNow的区别
- Linux \windows的Nginx静态代理配置文件
- iMindMap的起点,你选对了吗?
- ExecutorService线程池的使用
- mybatis xml文件中的大于、小于、及like模糊查询的写法