java实现归并排序
2016-05-13 10:48
537 查看
import java.util.Arrays; public class MergSort { public static void mergSort(int[] data) { // 建立临时数组,最后要在merge里面用 // 在这里建立而不在merge里面建立的原因是减少new临时数组的次数,加快程序效率 int[] temp = new int[data.length]; // 调用merg_Sort merg_sort(data, temp, 0, data.length - 1); } public static void merg_sort(int[] data, int[] temp, int left, int right) { // 递归头,每次递归都要有递归头 if (left >= right) return; // merg_Sort的主要作用是分治,也就是切割原来的数组,并不做排序 int middle = (left + right) / 2; merg_sort(data, temp, left, middle); merg_sort(data, temp, middle + 1, right); // 调用merg merge(data, temp, left, middle + 1, right); } // 主要逻辑函数,负责把2个数组按大小次序合并成一个数组 // 上一个函数已经把数组拆分成单个元素,所以可以调用此函数,进行合并 public static void merge(int[] data, int[] temp, int left, int middle, int right) { // 先要把left和middle保存起来,否则等会移动后找不到了 int i = left; int j = middle; // 合并后的数组的索引 int cur = left; // 迭代的条件,两个数组都还有元素 while (i <= middle - 1 && j <= right) { // 左边数组比右边小就把左边数组拷贝进新数组 while (i <= middle - 1 && data[i] <= data[j]) temp[cur++] = data[i++]; // 右边数组比左边小就把右边数组拷贝进新数组 while (j <= right && data[j] <= data[i]) temp[cur++] = data[j++]; } // 把没有拷贝完成的数组拷贝到新数组 while (i <= middle - 1) temp[cur++] = data[i++]; while (j <= right) temp[cur++] = data[j++]; // 把新数组的元素拷贝到原来数组 for (int m = left; m <= right; m++) data[m] = temp[m]; } public static void main(String[] args) { // 测试mergSort // int[] data = { 5, 4, 3, 2, 1 }; // int[] data = { 2, 3, 1, 5, 4, 8, 6, 7, 3, 8, 9, 1 }; int[] data = { 2, 0, 1 }; mergSort(data); System.out.println(Arrays.toString(data)); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树