时间复杂度: 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--) //--k是错的 { arr1[k] = temp[k]; } //for (size_t m = 0; m < n1 + n2; m++) //{ // arr1[m] = temp[m]; //} 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] <<" "; }