- 时间复杂度: O(nlog2n)
- 空间复杂度: O(n)
- 稳定性: 稳定
void Merge(int arr1[], int arr2[], int n1, int n2);
void MergeSort(int arr[], int n) {
if (n > 1) {
int mid = n / 2;
MergeSort(arr, mid);
MergeSort(arr + mid, n - mid);
Merge(arr, arr + mid, mid, n - mid);
}
}
void Merge(int arr1[], int arr2[], int n1, int n2) {
int i(0), j(0), k(0);
int* temp = new int[n1 + n2];
while (i < n1 && j < n2)
{
if (arr1[i] < arr2[j]) {
temp[k++] = arr1[i++];
}
else{
temp[k++] = arr2[j++];
}
}
while (i < n1)
{
temp[k++] = arr1[i++];
}
while (j < n2)
{
temp[k++] = arr2[j++];
}
while (k--)
{
arr1[k] = temp[k];
}
delete[] temp;
}
void main() {
int arr[100];
int n = 10;
srand(int(time(0)));
for (int i = 0; i < n; i++) {
arr[i] = rand() % 1000;
std::cout << arr[i] << " ";
}
std::cout << " " << std::endl;
MergeSort(arr, n);
for (int i = 0; i < n; i++)
std::cout << arr[i] <<" ";
}