Java归并排序
来源:互联网 发布:2015年癌症数据 编辑:程序博客网 时间:2024/04/29 20:56
/** * 归并排序,要求待排序的数组必须实现Comparable接口 */public class MergeSort { @SuppressWarnings("unchecked") private Comparable[] bridge; /** * 利用归并排序算法对数组obj进行排序 */ @SuppressWarnings("unchecked") public void sort(Comparable[] obj) { if (obj == null) { throw new NullPointerException("The param can not be null!"); } bridge = new Comparable[obj.length]; // 初始化中间数组 mergeSort(obj, 0, obj.length - 1); // 归并排序 bridge = null; } /** * 将下标从left到right的数组进行归并排序 * * @param obj * 要排序的数组的句柄 * @param left * 要排序的数组的第一个元素下标 * @param right * 要排序的数组的最后一个元素的下标 */ @SuppressWarnings("unchecked") private void mergeSort(Comparable[] obj, int left, int right) { if (left < right) { int center = (left + right) / 2; mergeSort(obj, left, center); mergeSort(obj, center + 1, right); merge(obj, left, center, right); } } /** * 将两个对象数组进行归并,并使归并后为升序。归并前两个数组分别有序 * * @param obj * 对象数组的句柄 * @param left * 左数组的第一个元素的下标 * @param center * 左数组的最后一个元素的下标 * @param right * 右数组的最后一个元素的下标 */ @SuppressWarnings("unchecked") private void merge(Comparable[] obj, int left, int center, int right) { int mid = center + 1; int third = left; int tmp = left; while (left <= center && mid <= right) { // 从两个数组中取出小的放入中间数组 if (obj[left].compareTo(obj[mid]) <= 0) { bridge[third++] = obj[left++]; } else bridge[third++] = obj[mid++]; } // 剩余部分依次置入中间数组 while (mid <= right) { bridge[third++] = obj[mid++]; } while (left <= center) { bridge[third++] = obj[left++]; } // 将中间数组的内容拷贝回原数组 copy(obj, tmp, right); } /** * 将中间数组bridge中的内容拷贝到原数组中 * * @param obj * 原数组的句柄 * @param left * 要拷贝的第一个元素的下标 * @param right * 要拷贝的最后一个元素的下标 */ @SuppressWarnings("unchecked") private void copy(Comparable[] obj, int left, int right) { while (left <= right) { obj[left] = bridge[left]; left++; } }}
0 0
- java排序--归并排序
- 排序-归并排序-Java
- 归并排序Java实现
- java归并排序算法
- JAVA归并排序算法
- java归并排序
- java归并排序
- Java实现归并排序
- 归并排序(java)
- 25、JAVA归并排序
- java 归并排序
- java归并排序
- Java归并排序
- 归并排序 java
- Java实现归并排序
- 归并排序Java实现
- java 归并排序
- Java归并排序
- 手把手教你用U盘安装Ubuntu
- windows 7与Virtual Box中的Ubuntu共享文件的方法
- 解决无法创建txt文档
- HDU 1003 最大连续字数段问题
- basil折腾emacs:02:字体配置
- Java归并排序
- cocos2d-x 2.x在android上使用C++11时的设定
- [原创]传递UIScrollView的滑动事件到其子视图中
- [原创]使用iOS端Safari查看设备UDID
- [原创]控制iphone震动强度和时间的private api
- equals()和hashcode()的探讨和重写
- Greedy is Good
- 东府荣大奶奶没了
- Java 7之多线程线程池 - 线程池原理(2)