归并排序
Posted hao-blogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。
归并排序
基本思想
- 将待排序元素分成大小大致相同的 2 个子集合;
- 分别对 2 个子集合进行排序;
- 最终将排好序的子集合合并成为所要求的排好序的集合。
最常使用的归并排序方法是2-路归并排序。
复杂度和稳定性
时间复杂度:O(nlog2n)
空间复杂度:O(n)
稳定性:稳定
代码
static void mergeSort(int[] nums){
int[] tmp = new int[nums.length];
mergeSort(nums, tmp, 0, nums.length - 1);
}
static void mergeSort(int[] nums, int[] tmp, int left, int right){
if (left >= right)
return;
int mid = (left + right) / 2;
mergeSort(nums, tmp, left, mid);
mergeSort(nums, tmp, mid + 1, right);
merge(nums, tmp, left, mid, right);
}
static void merge(int[] nums, int[] tmp, int left, int mid, int right){
for (int i = left; i <= right; i++){
tmp[i] = nums[i];
}
int i = left;
int j = mid + 1;
int k = left;
while (i <= mid && j <= right){
if (tmp[i] <= tmp[j]){
nums[k++] = tmp[i++];
}else{
nums[k++] = tmp[j++];
}
}
while (i <= mid){
nums[k++] = tmp[i++];
}
while (j <= right){
nums[k++] = tmp[j++];
}
}
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章