合并排序-java
来源:互联网 发布:数据库试用 编辑:程序博客网 时间:2024/05/23 12:01
转载请注明出处:http://blog.csdn.net/lx1848/article/details/51408085
1. 创建一个类SortAlgorithm.java,然后将以下代码复制进去。
2. 在同一目录下创建文件DATA2,在里面保存待排序的数,以空格分割。
至于合并排序的理论就不多说了,类似文章很多。
合并排序算法的主要内容是在嵌套类MergeSort中。
拓展:如果要求这些数据中的逆序对数,你能借助合并排序求出来吗?tips: 在方法merge中考虑。
package sorting;import java.io.*;import java.util.Arrays;/** * Created by lx on 2016/5/14. */public class SortAlgorithm { static class MergeSort { public static void mergeSort(Comparable a[], int left, int right) { if(a == null) { throw new NullPointerException("input a is null"); } if(left > right || left < 0 || right >= a.length) { System.err.println("Usage: mergeSort(a, left, right), in which 0 <= left < right <= a.length-1 "); return; } if(left < right) { Comparable b[] = new Comparable[right-left+1]; //int i = (left + right) / 2; //avoid i is too large that out range of int int i = (left+right) >> 1; mergeSort(a,i+1,right); mergeSort(a,left,i); merge(a,b,left,i,right); copy(a,b,left,right); } } //merge two into b public static void merge(Comparable a[],Comparable b[], int left, int mid, int right) { int i, j, k = 0; i = left; j = mid+1; while (i <= mid && j <= right) { if(a[i].compareTo(a[j]) > 0) { b[k++] = a[j++]; } else { b[k++] = a[i++]; } } while (i <= mid) { b[k++] = a[i++]; } while (j <= right) { b[k++] = a[j++]; } } //copy b back to a public static void copy(Comparable a[],Comparable b[], int left, int right) { int j = 0; //while(j < b.length) while(j < (right-left + 1)) { a[j+left] = b[j++]; } } } public static Integer[] readData() { Comparable[] a = null; try {//文件DATA2中保存的是待排序的数据,以空格隔开 FileReader fr = new FileReader(new File(".\\DATA2")); BufferedReader br = new BufferedReader(fr); StringBuilder stringBuilder = new StringBuilder(); String str; while((str = br.readLine()) != null) { stringBuilder.append(str + " "); } String[] temp = stringBuilder.toString().split("\\s+"); a = new Integer[temp.length]; int i = 0; while (i < temp.length) { a[i] = Integer.parseInt(temp[i]); i++; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return (Integer[])a; } public static void main(String[] args) { //Integer a[] = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 }; Integer[] a; a = readData(); MergeSort demo = new MergeSort();//各种输入测试//a = null// demo.mergeSort(null,0,100);//left > right// demo.mergeSort(a, a.length-1, 0);//left = right//demo.mergeSort(a,a.length,a.length-1); System.out.println("sorting " + a.length + " numbers: " + Arrays.toString(a)); demo.mergeSort(a,0,a.length-1); System.out.println("sorted " + a.length + " numbers: " + Arrays.toString(a)); }}
0 0
- java 合并排序算法
- java 合并排序
- java合并排序
- 合并排序-java
- Java合并排序
- 合并排序(java)
- java合并排序
- 合并排序java实现
- 合并排序算法(java)
- 合并排序 java语言描述
- JAVA 合并排序(递归算法)
- java算法4 合并排序
- java实现合并排序算法
- Java实现-合并排序数组
- java递归浅析合并排序
- Java常用排序算法之合并排序
- java 合并排序算法(二)
- 合并排序算法(java实现)
- 72. Edit Distance 动态规划dp
- JSP中forward与sendRedirect在服务端路径问题
- Android之ViewDragHelper
- C Program Memory Layout
- 深入理解java内存模型(六)——final
- 合并排序-java
- 开启我的博客之旅
- Android之Fragment的前世今生(一)
- fork/join
- 深入理解java内存模型(七)——总结
- 添加环境变量
- zabbix3.0.2 监控防火墙实现过程
- 欢迎使用CSDN-markdown编辑器
- 判断震荡条件