下面代码用于归并排序,其中 merge() 函数被调用次数为( ):
#include <iostream>
using namespace std;
void mergeSort(int * listData, int start, int end);
void merge(int * listData, int start, int middle, int end);
void mergeSort(int * listData, int start, int end) {
if (start >= end)
return;
int middle = (start + end) / 2;
mergeSort(listData, start, middle);
mergeSort(listData, middle + 1, end);
merge(listData, start, middle, end);
}
void merge(int * listData, int start, int middle, int end) {
int leftSize = middle - start + 1;
int rightSize = end - middle;
int * left = new int[leftSize];
int * right = new int[rightSize];
for (int i = 0; i < leftSize; i++)
left[i] = listData[start + i];
for (int j = 0; j < rightSize; j++)
right[j] = listData[middle + 1 + j];
int i = 0, j = 0, k = start;
while (i < leftSize && j < rightSize) {
if (left[i] <= right[j]) {
listData[k] = left[i];
i++;
} else {
listData[k] = right[j];
j++;
}
k++;
}
while (i < leftSize) {
listData[k] = left[i];
i++;
k++;
}
while (j < rightSize) {
listData[k] = right[j];
j++;
k++;
}
delete[] left;
delete[] right;
}
int main() {
int lstA[] = {1, 3, 2, 7, 11, 5, 3};
int size = sizeof(lstA) / sizeof(lstA[0]);
mergeSort(lstA, 0, size - 1);
for (int i = 0; i < size; i++)
cout << lstA[i] << " ";
cout << endl;
return 0;
}