【发布时间】:2014-03-14 19:08:38
【问题描述】:
所以我已经为一个学校项目分配了从教授给出的伪代码实现合并排序。这就是我想出的,在我的用例中, 而不是订购: 0 1 4 5 9 它命令它: 5 4 1 0 9
我的用例: 5 9 1 0 5 4
这里是归并排序的归并部分和全局变量
long long intercambio;
int aux[5555], arr[555];
void merge(int begin, int middle, int end) {
int i = begin, j = middle+1, k = begin, temp;
while (i <= middle && j <= end) {
if (arr[i] < arr[j]) {
aux[k] = arr[i];
i++;
}
else {
aux[k] = arr[j];
j++;
}
k++;
noSwaps++;
}
if (i > middle) {
while (j <= end) {
if (aux[k -1] > arr[j]) {
temp = aux[k - 1];
aux[k - 1] = arr[j];
aux[k] = temp;
noSwaps++;
}
else {
aux[k] = arr[j];
}
k++;
j++;
}
}
else {
while (i <= middle) {
if (aux[k -1] > arr[i]) {
temp = aux[k - 1];
aux[k - 1] = arr[i];
aux[k] = temp;
noSwaps++;
}
else {
aux[k] = arr[i];
}
k++;
i++;
}
}
}
这里我递归地调用归并排序
void mergeSort(int begin, int end) {
if (begin < end) {
int middle = (begin + end) / 2;
mergeSort(begin, middle);
mergeSort(middle + 1, end);
merge(begin, middle, end);
}
}
这是主类
int main(int argc, const char * argv[])
{
int len;
cin >> len;
while (len != 0) {
for (int x = 0; x < len; x++)
cin >> arr[x];
noSwaps = 0;
mergeSort(0, len - 1);
for (int x = 0; x < len; x++)
cout << aux[x] << " ";
cout << endl;
cout << noSwaps << endl;
cin >> len;
}
return 0;
}
【问题讨论】:
-
我认为将代号翻译成英文可以帮助不懂西班牙语的人理解代号
-
很抱歉。翻译成英文变量名。
-
正确的翻译是
begin , middle , end,而不是start , half , end