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

A18411. 在对长度为n(n≥1)的数组进行归并排序的过程中, mergeArray 函数(合并两个有序子数组的操作)被调用的次数是( )。const int MAXN = 100005; int a[MAXN]; int tempArr[MAXN]; void mergeArray(int left, int mid, int right) { int i = left; // 左半部分起点 int j …

单选题 困难

题目描述

在对长度为n(n≥1)的数组进行归并排序的过程中, mergeArray 函数(合并两个有序子数组的操作)被调用的次数是(    )。

const int MAXN = 100005;
int a[MAXN];
int tempArr[MAXN];
void mergeArray(int left, int mid, int right) {
	int i = left;
	// 左半部分起点
	int j = mid + 1;
	// 右半部分起点
	int k = left;
	// 临时数组下标
	while (i <= mid && j <= right) {
		if (a[i] <= a[j]) {
			tempArr[k++] = a[i++];
		} else {
			tempArr[k++] = a[j++];
		}
	}
	while (i <= mid) {
		tempArr[k++] = a[i++];
	}
	while (j <= right) {
		tempArr[k++] = a[j++];
	}
	for (int p = left; p <= right; p++) {
		a[p] = tempArr[p];
	}
}
void mergeSort(int left, int right) {
	if (left >= right) {
		return;
	}
	int mid = left + (right - left) / 2;
	mergeSort(left, mid);
	mergeSort(mid + 1, right);
	mergeArray(left, mid, right);
}

选项(单选)

上一题 下一题