Spe*_*ian 1 c++ arrays pointers
我以前从未用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)])
Run Code Online (Sandbox Code Playgroud)
递归调用是我遇到问题的部分.我正在考虑创建两个指向所需位置的新数组,但不知道如何去做,特别是这样做并定义数组的长度.我已经尝试使用谷歌搜索并搜索这个网站,但似乎没有任何东西,我理解,在它上面.另外,如果我在我的代码中某处捏造,这就是我对第一位的看法.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,如何将else if语句转换为C++?解释也会很好.
谢谢
小智 6
您将希望将索引传递到数组中,并使用它们.
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);
}
Run Code Online (Sandbox Code Playgroud)
关于算法应该做什么,上面的代码可能不正确,但是你得到了我想要描述的想法.问题是:你没有复制数组.相反,始终传递相同的数组和您正在排序的范围(即索引).