归并排序Merge Sort
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的典型应用。
它指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。
[29 4] [11 10] [5 7] [99 66]
↓ ↓ ↓ ↓
[4 29] [10 11] [5 7] [66 99]
然后再两两合并
[4 29 10 11] [5 7 66 99]
↓ ↓
[4 10 11 29] [5 7 66 99]
最后,再将这两个子数组合并
[4 10 11 29 5 7 66 99]
↓
[4 5 7 10 11 29 66 99]
public void mergesort() {
int[] orderedArr = new int[array.length];
for (int i = 2; i < array.length * 2; i *= 2) {
for (int j = 0; j < (array.length + i - 1) / i; j++) {
int left = i * j;
int mid = left + i / 2 >= array.length ? (array.length - 1) : (left + i / 2);
int right = i * (j + 1) - 1 >= array.length ? (array.length - 1) : (i * (j + 1) - 1);
int start = left, l = left, m = mid;
while (l < mid && m <= right) {
if (array[l] < array[m]) {
orderedArr[start++] = array[l++];
} else {
orderedArr[start++] = array[m++];
}
}
while (l < mid)
orderedArr[start++] = array[l++];
while (m <= right)
orderedArr[start++] = array[m++];
}
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有