介绍
如何在Java与Python实现一个归并排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
归并排序里运用到算法里很重要的一个思想,分治法:将原问题分解为几个规模较小但类似于原问题的子问题
1。分解问题
2。解决问题
3。合并问题的解
举例待排序数组:{6、5、3、1、7、2、4},将它原始序列做分解。
可以经过不断的递归分解可以看到已经把原始数组序列不断分解为最小单位,接下来不妨将它们看做是二叉树的叶子节点。
将他们进行两两归并排序形成二叉树(也称为2路归并算法),可见二叉树的根节点即为最终序列。在这个过程中我们完成了剩余的两个步骤:解决问题和合并问题。
理论很简单,实践很“复杂”。对于归并排序的理论从上面的二叉树就看的很明白,将原始待排序数组不断分解最后看成是二叉树的叶子节点,再把它们两两排形成新的节点,逐渐归并为一个节点,此时的节点即为排好序的数组序列。
<强> 强>
包com.algorithm.sort.merge; 进口java.util.Arrays;/* * *归并排序(递归) *由yulinfeng>二号路归并排序(递归) def merge_sort (num): 段(num 0 len (num) - 1) 返回num #切分待排序数组 def段(num,左,右): 如果离开祝辞=右: 返回 中心=int((左+右)/2) 段(num(左)中心) 段(num,中心+ 1,右) 合并(num(左)中心,右) #两两归并排好序的数组(二路归并) def合并(num(左)中心,右): tmpArray=[0] * len (num) rightIndex=中心+ 1 #右数组的第一个元素索引 tmpIndex=左 开始=左 而左& lt;=中心和rightIndex & lt;=正确: 如果num(左)& lt;=num [rightIndex]: tmpArray [tmpIndex]=num(左) tmpIndex +=1 左+=1 其他: tmpArray [tmpIndex]=num [rightIndex] tmpIndex +=1 rightIndex +=1 而左& lt;=中心: tmpArray [tmpIndex]=num(左) tmpIndex +=1 左+=1 而rightIndex & lt;=正确: tmpArray [tmpIndex]=num [rightIndex] tmpIndex +=1 rightIndex +=1 而开始& lt;=正确: num[开始]=tmpArray[开始] 开始+=1 num=[6、5、3、1、7、2, 4] num=merge_sort (num) 打印(num)
关于如何在Java与Python实现一个归并排序算法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。