错误" p食指"在这方面没有申明。 (第15行)
另外,使用
int a*
和
#include<iostream>
using namespace std;
int Partition(int a[], int start, int last);
void QuickSort(int a[], int start, int last)
{
/*if(start>=last)
{
return ;
}*/
{ if(start<last)
int Pindex=Partition(a, start, last);
QuickSort(a, start, Pindex-1);
QuickSort(a,Pindex+1, last);
}
}
int Partition(int a[] ,int start, int last)
{
int temp;
int Pindex=start;
int pivot=a[last];
for (int i=0;i<last;i++)
{
if(a[i]<=pivot)
{
temp=a[i];
a[i]=a[Pindex];
a[Pindex]=temp;
Pindex++;
}
}
temp=a[Pindex];
a[Pindex]=a[last];
a[last]=temp;
return Pindex;
}
int main()
{
int n;
cout<<"\n Enter the no of elements ";
cin>>n;
cout<<"\n Enter the elements ";
int A[n];
for (int i=0;i<n;i++)
{
cin>>A[i];
}
QuickSort(A,0,n-1);
cout<<"\n Sorted Array ";
for (int i=0;i<n;i++)
{
cout<<A[i];
}
return 0;
}
并提出一些资源来解释排序算法。
ids
答案 0 :(得分:1)
查看提供的源代码后,主要问题位于Partition()
函数中。 int Pindex
中的本地QuickSort()
不再是使用递归调用导致Segmantation错误的问题。
在疑难解答函数
int Partition(int a[] ,int start, int last)
中,输入参数为start
和last
,但是for循环, 其中Pindex
递增的地方继续为for (int i=0;i<last;i++)
,并且会导致Pindex
大于last
且 最后一次反转a[Pindex]=a[last];
会导致写入错误。
for循环应在相同的输入参数范围内完成,如下所示:
int Partition(int a[] ,int start, int last)
{
int temp;
int Pindex=start;
int pivot=a[last];
// for-loop to the range [start;last[
for (int i=start;i<last;i++)
{
if(a[i]<=pivot)
{
temp=a[i];
a[i]=a[Pindex];
a[Pindex]=temp;
Pindex++;
}
}
temp=a[Pindex];
a[Pindex]=a[last];
a[last]=temp;
return Pindex;
}
然后在纠正QuickSort拼写错误时一切正常。
void QuickSort(int a[], int start, int last)
{
/*if(start>=last) // to be deleted
{
return ;
}*/
if(start<last) {
int Pindex=Partition(a, start, last);
QuickSort(a, start, Pindex-1);
QuickSort(a,Pindex+1, last);
}
}