如何使用归并排序
本篇内容介绍了“如何使用归并排序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联建站成立10多年来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供做网站、网站制作、网站策划、网页设计、申请域名、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,创新互联建站通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序是用分治思想,分治模式在每一层递归上有三个步骤:
分解(Divide):将n个元素分成个含n/2个元素的子序列。
解决(Conquer):用合并排序法对两个子序列递归的排序。
合并(Combine):合并两个已排序的子序列已得到排序结果。
如下图所示:
代码如下:
public static int[] sort(int[] arr) { if (arr.length < 2) { return arr; } int middle = arr.length / 2; int[] left = Arrays.copyOfRange(arr, 0, middle); int[] right = Arrays.copyOfRange(arr, middle, arr.length); //递归调用 return merge(sort(left), sort((right))); } private static int[] merge(int[] left, int[] right) { int leftLength = left.length; int rightLength = right.length; int[] result = new int[leftLength + rightLength]; int i = 0; while (left.length > 0 && right.length > 0) { if (left[0] > right[0]) { result[i++] = right[0]; right = Arrays.copyOfRange(right, 1, right.length); } else { result[i++] = left[0]; left = Arrays.copyOfRange(left, 1, left.length); } } while (right.length > 0) { result[i++] = right[0]; right = Arrays.copyOfRange(right, 1, right.length); } while (left.length > 0) { result[i++] = left[0]; left = Arrays.copyOfRange(left, 1, left.length); } return result; }
“如何使用归并排序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
分享名称:如何使用归并排序
标题URL:http://myzitong.com/article/jhgdod.html