首页 > 学院 > 开发设计 > 正文

归并排序

2019-11-06 08:21:49
字体:
来源:转载
供稿:网友

归并排序采用的是分治的思想,首先divide,把数组二分,然后再合并分开的两个数组,这里和并的两个数组分别都是有序的。合并后让整个start和end区间内的数组有序。

public static void main(String[] args) { int [] arr = {1,1,1,1,1,1,2,1,1,1,1,1,1,1}; int [] tmp = new int[arr.length] ; divide(arr,0,arr.length-1,tmp); for(int i:arr){ System.out.PRint(i+" "); } } private static void divide(int[] arr, int start, int end,int [] tmp) { if(start < end){ int mid = (start+end)/2; divide(arr,start,mid,tmp); divide(arr,mid+1,end,tmp); merge(arr,start,mid,end,tmp); } return ; } private static void merge(int[] arr, int start, int mid, int end,int [] tmp) { int i = start; int j = mid +1; int k = 0; while(i <= mid && j <= end){ if(arr[i] <= arr[j]){ tmp[k++] = arr[i++]; }else{ tmp[k++] = arr[j++]; } } while(i <= mid){ tmp[k++] = arr[i++]; } while(j <= end){ tmp[k++] = arr[j++]; } for(i = 0 ; i < k;i++){ arr[start+i] = tmp[i]; } }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表