归并排序
来源:互联网 发布:佳能288清零软件 编辑:程序博客网 时间:2024/06/03 05:25
归并排序:先使每个子序列有序看,再使 子序列段 有序;将已有序的子序列合并,得到的完全的序列;若将两个有序表合并成一个有序表,称为二路归并。
package dong.test;import java.util.Arrays;public class MergeSort { public static void Sort(int[] arr){ int length = arr.length; Sort(arr,0,length-1); } //递归 private static void Sort(int[] arr, int l, int r) { if(l>=r){//分解到一个元素的时候返回 return; } int mid = (l+r)/2; Sort(arr,l,mid);//排序左边的元素 Sort(arr,mid+1,r);//排序右边的元素 Merge(arr,l,mid,r);//归并 } private static void Merge(int[] arr, int l, int mid, int r) { //复制待排序的元素块到数组aux int[] aux = Arrays.copyOfRange(arr, l, r+1); //初始化让i指向左半部分的起始位置的索引;j指向右半部分的起始位置的索引位置mid+1 int i = l,j = mid+1; for(int k=l;k<=r;k++){ //如果左半部分元素已经全部处理完毕 if(i>mid){ arr[k] = aux[j-l]; j++; } //如果右半部分元素已经全部处理 else if(j>r){ arr[k] = aux[i-l];i++; } //左半部分所指的元素 < 右半部分所指的元素 else if(aux[i-l]<aux[j-l]){ arr[k]=aux[i-l]; i++; }else{//左半部分所指的元素 >= 右半部分所指的元素 arr[k]=aux[j-l]; j++; } } } public static void main(String[] args) { int[] arr = {10,4,6,3,8,2,5,7}; MergeSort.Sort(arr); for(int a :arr){ System.out.print(a+" "); } }}
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 关于项目log
- Loadlibrary 加载指定动态库失败的问题解决
- 313. Super Ugly Number
- 面试总结之Session生命周期与工作原理
- 高并发下线程安全的单例模式(最全最经典)
- 归并排序
- angularjs中防止HTML转义
- 每日AC--LeetCode-- wordBreak--动态规划
- Java简介、安装及一些注意事项
- RecyclerView实现分割线、点击事件、条目加载动画
- [ICLR2017]Deep Biaffine Attention for Neural Dependency Parsing
- 单例模式
- Python时间序列LSTM预测系列教程(6)-单变量
- java 获取客户端真实ip方法