【数据结构&&算法系列】归并排序简单介绍及python代码
来源:互联网 发布:mac 邮件储存位置 编辑:程序博客网 时间:2024/05/21 11:03
归并排序主要采用分治的策略,先对比较小的子序列进行排序,然后对相邻的两个子序列进行合并,依次到对最后剩下的两个子序列进行合并得到最终的排好序的序列。
其中合并两个有序序列的时候可以设置哨兵,哨兵可以减少代码量。对降序排列,哨兵是非常小的数;对升序排序,哨兵是非常大的数。设置哨兵的目的是让所有在哨兵另一边的数参与排序,减少对边界条件的判断。
当然用python语言的时候,merge两个有序序列的时候可以采用下列代码,但为了方便更改为其他语言,最终版本用哨兵的方式进行合并。
注意:
python中用 float("inf")表示正无穷,float("-inf")表示负无穷。
def merge2(arr,p,q,r,reverse=False):arr1 = arr[p:q+1]arr2 = arr[q+1:r+1]k = pwhile arr1 and arr2:if reverse==False:if arr1[0] <= arr2[0]:arr[k] = arr1.pop(0)else:arr[k] = arr2.pop(0)k += 1else:if arr1[0] >= arr2[0]:arr[k] = arr1.pop(0)else:arr[k] = arr2.pop(0)k += 1arr[k:r+1] = arr1 + arr2
代码
#coding:utf-8MAX_MIN = [float("inf"),float("-inf")]def merge(arr,p,q,r,reverse=False):arr1 = arr[p:q+1]arr1.append(MAX_MIN[reverse])arr2 = arr[q+1:r+1]arr2.append(MAX_MIN[reverse])i=j=0for k in range(p,r+1):if reverse==False:if arr1[i] <= arr2[j]:arr[k] = arr1[i]i+=1else:arr[k] = arr2[j]j+=1else:if arr1[i] >= arr2[j]:arr[k] = arr1[i]i+=1else:arr[k] = arr2[j]j+=1def merge_sort(arr, p, r, reverse=False):if p < r:q = (p+r)/2merge_sort(arr, p, q, reverse)merge_sort(arr, q+1, r, reverse)merge(arr, p, q, r, reverse)def show_arr(arr):print "[", ", ".join([str(x) for x in arr]), "]"if __name__ == "__main__":arr1 = [5.2, 2.3, 4.7, 6.9, 1.5, 3.2]merge_sort(arr1, 0, len(arr1)-1)show_arr(arr1)arr2 = [7, 4, 2, 5, 1, 6, 9, 1]merge_sort(arr2, 0, len(arr2)-1, reverse=True)show_arr(arr2)
0 0
- 【数据结构&&算法系列】归并排序简单介绍及python代码
- 【数据结构&&算法系列】插入排序简单介绍及python代码
- 【数据结构&&算法系列】快速排序简单介绍及实现
- 【数据结构&&算法系列】堆排序简单介绍及其实现
- python数据结构与算法 34 归并排序
- python算法实现系列-归并排序
- 数据结构和算法系列8 七大排序之归并排序
- [数据结构] 归并排序算法
- 【数据结构与算法】【排序】归并排序的代码实现
- 算法系列-归并排序
- 数据结构和算法系列 - c语言归并排序法
- 数据结构系列之归并排序
- 简单算法--归并排序
- 排序算法系列-归并排序
- Python归并排序算法
- Python:归并排序算法
- Python实现各类数据结构和算法----归并排序
- Python 数据结构与算法——归并排序
- 完整的windows下搭建Qt开发环境 QT4.8+qt creator2.8.0, 解决 gbd异常中断 和 静态编译
- js DES加密
- JDBC异常总结
- opencv2在直方图反投影算法中使用颜色信息
- android之WebView
- 【数据结构&&算法系列】归并排序简单介绍及python代码
- Opencv之矩阵的掩码操作
- Ubuntu历险记
- [HTML] CSS 下拉菜单
- C#的几种写文件方法
- 25行代码等价实现-借助Nodejs在服务端使用jQuery采集17173游戏排行信息
- 生命的重量
- sublime text 2中Emmet8个常用的技巧
- linux下32位机与64位机基本数据类型长度对比