这是基于本书(那不勒斯)中的算法的快速排序代码。结果是真的但在调试结束时它有一个运行时错误,我无法解决它。错误是堆损坏请帮我修复或改进它(如果它是错的)。谢谢你的所有答案。
#include <conio.h>
#include <iostream>
using namespace std;
int partition( int *A, int p, int q)
{
int x = A[p];
int i = p;
for (int j = p+1; j <= q; j++)
{
if (A[j] <= x)
{
i++;
swap (A[j],A[i]);
}
}
swap (A[i],A[p]);
return i;
}
void Quick_sort( int *A, int p, int r)
{
int q;
if( p<r)
{
q = partition(A,p,r);
Quick_sort( A, p, q-1);
Quick_sort( A, q+1, r);
}
}
void main()
{
int n;
cout << "How many elements do you want to sort(quicksort)? ";
cin >> n;
int *A;
A = new int [n];
for (int k=0;k<n;k++)
{
cout << "A["<<k<<"]= ";
cin >> A[k];
}
cout << endl;
Quick_sort(A,1,n);
cout << "\nsorted array: " <<endl;
for (int i = 1; i < n+1; i++)
{
cout << A[i]<<"\t";
}
cout << endl;
delete A;
}
问题是:为什么这段代码有错误?你在这看到多少错误?
答案 0 :(得分:1)
你有一个所谓的“栅栏贴错误”,你的数组索引是一个。 行
A =(int *) malloc(n * sizeof(int));
和
for (int k=1;k<=n;k++)
{
cout << "A["<<k<<"]= ";
cin >> A[k];
}
可能导致错误,你用1而不是0开始索引。代码应该是
for (int k=0;k<n;++k)
{
cout << "A["<<k<<"]= ";
cin >> A[k];
}
请注意,在第二个for-loop
中也有相同的错误答案 1 :(得分:0)
代码应为:for (int k=1;k<=n;k++)
而不是for(int k=0;k<n;++k)
并且还改变了这一行:
A = new int [n];
A = new int [n+1];
<div id="chatbox">
<div class="msg-box">
<label class="cnick">OtherUsers:</label>
<br>
<label class="cmsg">Some random text</label>
<div class="cspc"></div>
<br>
</div>
<div class="msg-box">
<label class="cnick">OtherUsers:</label>
<br>
<label class="cmsg">Some random text</label>
<div class="cspc"></div>
<br>
</div>
<div class="msg-box">
<label class="cnick">OtherUsers:</label>
<br>
<label class="cmsg">Some random text</label>
<div class="cspc"></div>
<br>
</div>
<div class="msg-box">
<label class="cnick">OtherUsers:</label>
<br>
<label class="cmsg">Some random text</label>
<div class="cspc"></div>
<br>
</div>
</div>
我调试它没有错误!
祝你好运