排序之归并排序
来源:互联网 发布:win7公用网络无法点击 编辑:程序博客网 时间:2024/06/18 06:15
package sort;import java.util.Arrays;/** * Created by gch on 2017-08-15. */public class MergeSort { public static void main(String[] args) { int[] arr = {9,8,7,6,5,4,3,2,1}; mergeSortUncre(arr);// mergeSort(arr,0,arr.length-1); System.out.print(Arrays.toString(arr)); } /** * 递归 归并 * @param arr */ private static void mergeSort(int[] arr,int left,int right){ if(arr == null || arr.length < 2 || left>=right){ return; } int mid = (left+right)/2; mergeSort(arr,left,mid); mergeSort(arr,mid+1,right); merge(arr,left,mid,mid+1,right); } private static void merge(int[] arr,int leftStart,int leftEnd,int rightStart,int rightEnd ){ int[] tmp = new int[rightEnd-leftStart+1]; int i=leftStart,j=rightStart,k=0; while(i<=leftEnd && j<=rightEnd){ if(arr[i]<=arr[j]){ tmp[k++] = arr[i]; i++; }else{ tmp[k++] = arr[j]; j++; } } while(i<=leftEnd){ tmp[k++] = arr[i++]; } while(j<=rightEnd){ tmp[k++] = arr[j++]; } for(k=0;k<tmp.length;k++){ arr[leftStart+k] = tmp[k]; } } /** * 归并 非递归 * @param arr */ public static void mergeSortUncre(int[] arr){ if(arr == null || arr.length <2){ return; } int len = arr.length; for(int i=1;i<len;i*=2){ for(int j=0;j<=len-i-1;j+=i*2){ merge(arr,j,j+i-1,j+i,Math.min(j+2*i-1,len-1)); } } }}
阅读全文
0 0
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序 之 归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 排序之归并排序
- 矩形的个数
- Connect the Cities(Prim)
- python中axis的作用
- POJ 1330 挑战程序设计 LCA模版
- 文章标题
- 排序之归并排序
- 狄克斯特拉算法
- 什么是死锁及死锁的必要条件和解决方法
- macbook-pro启动tomcat命令
- C++之了解new-handler的行为(49)---《Effective C++》
- Java集合-05之 LinkedList
- Ajax作用及用法
- 剑指offer(4)
- java web简介