归并排序
来源:互联网 发布:淘宝装修视频代码 编辑:程序博客网 时间:2024/05/22 07:05
归并排序的JAVA实现
import java.util.Arrays;//归并排序之JAVA实现(迭代法)public class MergeSort { public void Merge(int[] array, int low, int mid, int high) { int i = low; // i是第一段序列的下标 int j = mid + 1; // j是第二段序列的下标 int k = 0; // k是临时存放合并序列的下标 int[] arrayTemp = new int[high - low + 1]; // arrayTemp是临时合并序列 // 扫描第一段和第二段序列,直到有一个扫描结束 while (i <= mid && j <= high) { // 判断第一段和第二段取出的数哪个更小,将其存入合并序列,并继续向下扫描 if (array[i] <= array[j]) { arrayTemp[k] = array[i]; i++;// 小的往前走 k++; } else { arrayTemp[k] = array[j]; j++;// 小的往前走 k++; } } // 若第一段序列还没扫描完,将其全部复制到合并序列 while (i <= mid) { arrayTemp[k] = array[i]; i++; k++; } // 若第二段序列还没扫描完,将其全部复制到合并序列 while (j <= high) { arrayTemp[k] = array[j]; j++; k++; } // 将合并序列复制到原始序列中 for (k = 0, i = low; i <= high; i++, k++) { array[i] = arrayTemp[k]; } } /** * * @param array * 待排序数组 * @param gap * 归并子数组长度 * @param length * 待排序数组的长度 */ public void MergePass(int[] array, int gap, int length) { int i = 0; // 每趟合并的起始位置索引(都是从第一个开始) // 归并gap长度的两个相邻子表 // (i + 2 * gap - 1) 本次合并的两组序列中右边序列的最后索引位置 // (i = i + 2 * gap) 下组合并的起始索引位置 // 通过(i + 2 * gap - 1 <length)的比较可 // 以判断出是否剩余两组可以进行合并,如果小于,说明至少还有两组可以进行合并, // 如果不小于,说明只剩一组,对于剩下的一组,则不用关心 // 1、剩余一组,可能小于也可能等于一个gap长度 // 2、剩余两组,最后一组小于一个gap长度 for (i = 0; i + 2 * gap - 1 < length; i = i + 2 * gap) { Merge(array, i, i + gap - 1, i + 2 * gap - 1);// 此方法实现具体的比较过程 // 每一次排序往两个子数组之后,通过(i = i + 2 * gap)来索引到下一组待排序的子数组 } // 当存在这样余下的两个子表,前者子数组的长度为当前gap,后者长度小于本次合并子序列的gap // 通过(i + gap - 1 < length)的比较可以让最后一组合并到前面的大组中去。 System.out.println("(" + i + "+" + gap + "-1)=" + (i + gap - 1) + "==" + length); if (i + gap - 1 < length) { Merge(array, i, i + gap - 1, length - 1);// 如果配对完剩余一个子数组,则(i + gap - // 1)==(length - 1) } } public int[] Sort(int[] list) { int cishu = 0; for (int gap = 1; gap < list.length; gap = 2 * gap) { MergePass(list, gap, list.length);// 此方法实现具体的比较过程 System.out.println("归并排序第[" + (++cishu) + "]次:" + Arrays.toString(list)); } return list; }}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 交换排序-冒泡排序
- Deep Learning Trends @ ICLR 2016:深度学习趋势@ICLR2016(译)
- TCP/IP详解第二版(卷1 协议)
- 交换排序-快速排序
- 微信接口API之长链接转短链接代码示例
- 归并排序
- java的堆和栈
- QT中控制窗口大小
- 基数排序
- Binder解析
- C/C++,常对象 - 保护共享数据
- mysql能用localhost连接不能使用127.0.0.1连接的解决办法
- UIScrollView---摘自培训文档
- Eclipse中配置启动Tomcat服务器,以及错误及报错解决