归并排序:
排序类别 | 排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 |
| ||
平均情况 | 最坏情况 | 最好情况 | |||||
归并排序 | 归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
|
代码:
#include <iostream>
#include <cstdio>
using namespace std;
void Merge(int Array[], int start, int mid, int end)
{
int i = start;
int j = mid + 1;
int k = 0;
int temp[end - start + 1];
while(i <= mid && j <= end){
if(Array[i] <= Array[j]){
temp[k++] = Array[i++];
}
else{
temp[k++] = Array[j++];
}
}
while(i <= mid){
temp[k++] = Array[i++];
}
while(j <= end){
temp[k++] = Array[j++];
}
for(int i = 0; i < k; i++){
Array[start+i] = temp[i];
}
}
void MergeSort(int Array[], int start, int end)
{
if(start >= end){
return ;
}
int mid = (start + end) >> 1;
MergeSort(Array, start, mid);
MergeSort(Array, mid+1, end);
Merge(Array, start, mid, end);
}
int main()
{
int a[] = {1,3,6,5,9,2,8,7,0,4};
MergeSort(a, 0, 9);
for(int i = 0; i < 10; i++){
cout << a[i] << " ";
}
}