【发布时间】:2021-12-31 13:41:31
【问题描述】:
问题
我有一个 Java 源代码,用于使用 merge sort 算法对数组元素进行排序。该原理使用循环将数组中的元素与数组中下一个索引中的元素进行比较。如果前面的大于后面的,则数字在逻辑上交换为reassign 索引中的数组元素。
我的问题是 Java 算法有效,但 C++ 算法无效。逻辑是一样的,我做错了什么......
代码
Working Java Code
static void sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
基于与 Java 源代码相同的合并排序伪代码构建的 C++ 代码但无法正常工作
void sorting(int d[]) {
for (int i = 0; i < sizeof(d); i++) {
for (int j = i + 1; j < sizeof(d); j++) {
if (d[i] > d[j]) {
int temp = d[i];
d[i] = d[j];
d[j] = temp;
}
}
}
}
输入格式
这两种方法都从初始化为固定大小的数组中获取参数,然后使用循环从用户获取输入并分配给数组,用户必须先输入数组的大小。
合并排序算法在其他语言中的可靠性
我已经在 JavaScript、Python 和 C# 中应用了合并排序伪代码,它们都有效。我不知道为什么 C++ 会是一个例外,请帮助...
【问题讨论】:
-
sizeof(d)不是数组的大小。您将需要将数组长度作为参数传递。或者只使用std::vector。 -
我在网上查了一下,他们说要检查我们需要使用的数组的大小
sizeof -
如果您事先知道数组的大小,请使用
std::array,如果您不知道,请使用std::vector。 -
你需要的尺寸
sizeof(d)/sizeof(d[0]). -
这能回答你的问题吗? size of array passed to C++ function?
标签: java c++ arrays algorithm sorting