这是我现在正在研究的问题,不知道如何解决。我应该把伪代码写入合并函数,但我不确定我应该做什么。我给出的内容如下:
Begin MergeSort(L[], start, stop)
if (stop<=start) return;
int m = (start+stop)/2;
MergeSort(L, start, m);
Mergesort(L, m+1, stop);
merge(L, start, m, stop);
End MergeSort
我被告知的另一件事是,我应该找到&#34;合并(L,开始,m,停止);&#34;线。我一整天都在研究,我发现的一切都说你应该有2个阵列,分别叫做左右,分配递归线,制作:
Begin MergeSort(L[], start, stop)
if (stop<=start) return;
array left[];
array right[];
int m = (start+stop)/2;
left=MergeSort(L, start, m);
right=Mergesort(L, m+1, stop);
merge(L, start, m, stop);
End MergeSort
如果我遇到了这个问题,我就可以解决它,但是我被卡住了,因为一旦我将每个子列表分成单个元素,我甚至不确定我&# 39;我应该打电话给他们,所以我不确定如何与他们合作。
我在代码方面仍然是初学者(采用C和Python的基础知识),所以请尽可能简化答案。
非常感谢您阅读此内容,我希望我能得到答案,以便了解我的目标。
答案 0 :(得分:0)
MergeSort由2个函数组成:mergeSort和merge。第一个你已经写好了。所以,唯一的问题是合并功能。 由于合并排序不是空间排序算法,因此需要额外的空间来存储数据。 Bellow是合并函数的简化版本,它创建了额外的大小数组 stop - start :
Begin merge(L[] array, int start, int m, int stop)
if (start == stop) {
return;
}
int leftPos = start;
int rightPos = m + 1;
int curPos = start;
L[] temp = new L[stop - start];
while(leftPos <= m && rightPos <= stop) {
if (array[leftPos] <= array[rightPos]) {
temp[curPos++] = array[leftPos++];
} else {
temp[curPos++] = array[rightPos++];
}
}
while(leftPos <= m) {
temp[curPos++] = array[leftPos++];
}
while(rightPos <= stop) {
temp[curPos++] = array[rightPos++];
}
for (int i = start; i <= stop; i++) {
array[i] = temp[i - start];
}
End merge