合并排序的递归算法
来源:互联网 发布:芒果tv会员账号淘宝 编辑:程序博客网 时间:2024/06/05 06:45
合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。合并排序也叫归并排序。
话不多说,上代码:
import java.util.Scanner;//合并排序public class Test10 { public static void mergeSort(int a[], int left, int right) { if (left < right) {// 至少有2个元素 int i = (left + right) / 2; // 取中点 mergeSort(a, left, i); mergeSort(a, i + 1, right); int b[]=new int[a.length]; merge(a, b, left, i, right); // 合并两个排好序的数组段到一个新的数组b中 Copy(a, b, left, right); // 将合并后的数组段再复制回数组a中 } } public static void merge(int c[], int d[], int l, int m, int r) { int i = l, j = m + 1, k = l; while ((i <= m) && (j <= r)) if (c[i] <= c[j]) d[k++] = c[i++]; else d[k++] = c[j++]; if (i > m) for (int q = j; q <= r; q++) d[k++] = c[q]; else for (int q = i; q <= m; q++) d[k++] = c[q]; } public static void Copy(int a[], int b[], int m, int n) { for (int i = m; i <= n; i++) a[i] = b[i]; } public static void main(String[] args) { try { System.out.println("排序的元素个数:"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int list[] = new int[n]; System.out.println("依次输入所有的元素:"); for (int i = 0; i <= list.length - 1; i++) { list[i] = sc.nextInt(); } mergeSort(list, 0, list.length-1); for (int k = 0; k < list.length; k++) { System.out.print(list[k] + " "); } } catch (Exception e) { e.printStackTrace(); } }}
运行结果:
其他语言的参考:
百度百科
1 0
- 合并排序的递归算法
- 合并排序的非递归算法
- 合并排序的递归实现算法
- 合并排序算法(非递归)
- 合并排序(非递归算法)
- JAVA 合并排序(递归算法)
- 递归的合并排序
- 算法设计与分析 合并排序的递归实现算法
- 合并排序的递归算法和非递归算法、快速排序算法
- 合并两个排序的链表(递归算法)
- 合并排序的递归实现
- 合并排序(归并排序)的递归和非递归
- 合并排序的非递归实现
- 合并排序的非递归实现
- 递归合并排序
- 递归合并排序
- 非递归合并排序
- 递归合并排序
- POJ
- python-opencv-轮廓检测
- SpringBoot非官方教程 | 第三篇:SpringBoot用JdbcTemplates访问Mysql
- 数据语句
- AngularJs学习笔记(1)--简介和数据绑定
- 合并排序的递归算法
- 浏览器渲染引擎
- 推荐系统之协同过滤(CF)算法
- 2017算法课.09(Is Subsequence)
- vb.net 教程 3-3 窗体编程 输入对话框 2
- 二分搜索树的实现以及各种操作(支持重复节点)
- 【Java】大文本字符串滤重的简单方案~
- AngularJs学习笔记(2)--控制器和ng-bind
- 用户画像设计总结