首页 > 代码库 > MergeSort
MergeSort
递归方式:
1 public static Object[] mergeSort(Object[] o) { 2 o = o.clone(); 3 mergeSort(o, 0, o.length - 1); 4 return o; 5 } 6 7 private static void mergeSort(Object[] o, int l, int r) { 8 if (r > l) { 9 int mid = (l + r) >>> 1;10 mergeSort(o, l, mid);11 mergeSort(o, mid + 1, r);12 merge(o, l, mid, r);13 }14 }15 16 @SuppressWarnings({ "unchecked", "rawtypes" })17 private static void merge(Object[] o, int l, int mid, int r) {18 Object[] temp = new Object[o.length];19 int lp = l;20 int rp = mid + 1;21 int tp = l;22 while (lp <= mid && rp <= r) {23 Comparable c = (Comparable) o[lp];24 if (c.compareTo(o[rp]) <= 0)25 temp[tp++] = o[lp++];26 else27 temp[tp++] = o[rp++];28 }29 while (lp <= mid)30 temp[tp++] = o[lp++];31 while (rp <= r)32 temp[tp++] = o[rp++];33 while (l <= r)34 o[l] = temp[l++];35 }
迭代方式:
1 public static void loopMergeSort(Object[] array) { 2 int len=array.length; 3 for(int step=1; step<len; step<<=1){ 4 int s2 = step<<1; 5 for(int i=0; i<len; i+=s2){ 6 int r=i+s2-1; 7 int mid=(i+r)>>>1; 8 if(mid>=len) 9 mid=len-1;10 if(r>=len)11 r=len-1;12 merge(array, i, mid, r);13 }14 15 }16 }
MergeSort
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。