JAVA排序算法---归并排序
2016-03-11 17:08
471 查看
package 测试包; import java.util.Arrays; public class MergeSort { /** * 归并排序 * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。 * 然后再把有序子序列合并为整体有序序列 * 时间复杂度为O(nlogn) * 稳定排序方式 * aa[]待排序数组 * 输出有序数组 */ //排序 public static int[] sort(int[] aa, int low, int high) { int mid = (low + high) / 2; if (low < high) { // 左边递归 sort(aa, low, mid); // 右边递归 sort(aa, mid + 1, high); // 左右归并 merge(aa, low, mid, high); } return aa; } //归并 public static void merge(int[] aa, int low, int mid, int high) { int[] temp = new int[high - low + 1]; int i = low;// 左指针 int j = mid + 1;// 右指针 int k = 0; // 把较小的数先移到新数组中 while (i <= mid && j <= high) { if (aa[i] < aa[j]) { temp[k++] = aa[i++]; } else { temp[k++] = aa[j++]; } } // 把左边剩余的数移入数组 while (i <= mid) { temp[k++] = aa[i++]; } // 把右边边剩余的数移入数组 while (j <= high) { temp[k++] = aa[j++]; } // 把新数组中的数覆盖aa数组 for (int k2 = 0; k2 < temp.length; k2++) { aa[k2 + low] = temp[k2]; } } // 归并排序的测试 public static void main(String[] args) { int[] aa = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 }; MergeSort.sort(aa, 0, aa.length-1); System.out.println(Arrays.toString(aa)); } }
相关文章推荐
- JAVA排序算法---归并排序
- JAVA排序算法---归并排序
- JAVA排序算法---归并排序
- JAVA排序算法---归并排序
- JAVA排序算法---归并排序
- SpringMVC中定时器继承Task后无法对service注入问题
- JAVA RMI实现远程接口调用
- Java多线程——thread及runnable的基本使用及交替执行
- leetcode:Partition List 【Java】
- Spring使用c3p0数据源
- java 模仿原版坦克大战
- java设计模式——结构型之适配器模式
- CXF+Spring 发布SOAP服务
- java工具类小知识
- [Java代码] Java 面向对象
- Eclipse 使用配置记录,快捷键
- [Java代码] Java排序算法之——希尔排序
- Eclipse中配置Struts2
- Spring+WebSocket整合(SSM)
- SpringMVC - 页面form表单绑定对象