码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2021-07-01 16:59:30      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ret   备份   vat   protected   ext   return   归并排序   while   for   

public class MergeSort<T extends Comparable<T>> extends Sort<T> {
private T[] leftArray;

@Override
protected void sort() {
leftArray = (T[]) new Comparable[array.length >> 1];
sort(0, array.length);
}

// T(n) = T(n/2) + T(n/2) + O(n)

/**
* 对 [begin, end) 范围的数据进行归并排序
*/
private void sort(int begin, int end) {
if (end - begin < 2) return;

int mid = (begin + end) >> 1;
sort(begin, mid);
sort(mid, end);
merge(begin, mid, end);
}

/**
* 将 [begin, mid) 和 [mid, end) 范围的序列合并成一个有序序列
*/
private void merge(int begin, int mid, int end) {
int li = 0, le = mid - begin;
int ri = mid, re = end;
int ai = begin;

// 备份左边数组
for (int i = li; i < le; i++) {
leftArray[i] = array[begin + i];
}

// 如果左边还没有结束
while (li < le) {
if (ri < re && cmp(array[ri], leftArray[li]) < 0) {
array[ai++] = array[ri++];
} else {
array[ai++] = leftArray[li++];
}
}
}
}

归并排序

标签:ret   备份   vat   protected   ext   return   归并排序   while   for   

原文地址:https://www.cnblogs.com/syh918/p/14957580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!