我以前从未用 C++ 编程过,我正在尝试找出如何在 C++ 方法中递归传递数组的段。我正在尝试将以下伪代码转换为 C++。
SlowSort(A[1...n])
if n = 2
if A[1] > A[2]
Swap(A[1], A[2])
else if n > 2
SlowSort(A[1...(2n/3)])
SlowSort(A[(n/3+1)... n])
SlowSort(A[1...(2n/3)])
递归调用是我遇到的问题。我正在考虑创建两个指向所需位置的新数组,但不知道如何去做,具体来说就是这样做并定义数组的长度。我试过用谷歌搜索并搜索这个网站,但据我所知,上面似乎没有任何内容。另外,为了防止我在代码中的某个地方弄错了,这里是我的第一部分。
int SlowSort(int A[])
{
int length = (sizeof(A)/sizeof(*A));
if(length ==2)
{
if(A[0] > A[1])
{
int temp = A[0];
A[0] = A[1];
A[1] = temp;
}
}
简而言之,如何将else if语句转换为C++?解释也很好。
谢谢
最佳答案
您需要将索引 传递到数组中,然后使用它们。
void SlowSort(int A[], int left, int right)
{
if (right - left == 2)
if (A[left] > A[right])
Swap(A[left], A[right]);
else
{
int n = right - left + 1;
SlowSort(A, left, 2 * n / 3);
SlowSort(A, left + n / 3 + 1, right);
SlowSort(A, left, left + 2* n / 3);
}
上面的代码对于算法应该做什么可能不正确,但你明白我试图描述的想法。问题是:您不复制数组。相反,始终传递相同的数组和您正在排序的范围(即索引)。
关于c++ - 在 C++ 中通过指针复制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207381/