测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A30977. 考虑以下C++代码实现的归并排序算法:void merge(int arr[], int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int L[n1], R[n2]; for (int i = 0; i < n1; i++) L[i] = arr[left + i]; for (int j…

单选题 困难

题目描述

考虑以下C++代码实现的归并排序算法:

void merge(int arr[], int left, int mid, int right) {
      int n1 = mid - left + 1;
      int n2 = right - mid;
      int L[n1], R[n2];
      for (int i = 0; i < n1; i++)
            L[i] = arr[left + i];
      for (int j = 0; j < n2; j++)
            R[j] = arr[mid + 1 + j];

      int i = 0, j = 0, k = left;
      while (i < n1 && j < n2) {
            if (L[i] <= R[j]) {
                  arr[k] = L[i];
                  i++;
            }
            else {
                  arr[k] = R[j];
                  j++;
            }
            k++;
      }
      while (i < n1) {
            arr[k] = L[i];
            i++;
            k++;
      }
      while (j < n2) {
            arr[k] = R[j];
            j++;
            k++;
      }
}
void merge_sort(int arr[], int left, int right) {
      if (left < right) {
            int mid = left + (right - left) / 2;
            merge_sort(arr, left, mid);
            merge_sort(arr, mid + 1, right);
            merge(arr, left, mid, right);
      }
}

对长度为 n 的数组 arr ,挑用函数 merge_sort(a, 0, n-1) ,在排序过程中 merge 函数的递归调用次数大约是(    )。

选项(单选)

上一题 下一题