#3552. [GESP202512 五级 C++] 第 9 题

[GESP202512 五级 C++] 第 9 题

下面代码实现了归并排序。下述关于归并排序的说法中,不正确的是( )。

void merge(vector<int>& arr, vector<int>& temp, int l, int mid, int r) {
    int i = l, j = mid + 1, k = l;
    while (i <= mid && j <= r) {
        if (arr[i] <= arr[j]) temp[k++] = arr[i++];
        else temp[k++] = arr[j++];
    }
    while (i <= mid) temp[k++] = arr[i++];
    while (j <= r)   temp[k++] = arr[j++];
    for (int p = l; p <= r; p++) arr[p] = temp[p];
}

void mergeSort(vector<int>& arr, vector<int>& temp, int l, int r) {
    if (l >= r) return;
    int mid = l + (r - l) / 2;
    mergeSort(arr, temp, l, mid);
    mergeSort(arr, temp, mid + 1, r);
    merge(arr, temp, l, mid, r);
}

{{ select(1) }}

  • 归并排序的平均复杂度是 O(nlogn)O(n \log n)
  • 归并排序需要 O(n)O(n) 的额外空间。
  • 归并排序在最坏情况的时间复杂度是 O(n2)O(n^2)
  • 归并排序适合大规模数据。