2017-01-01 116 views
-4

錯誤在此範圍內未聲明「Pindex」。 (第15行)
另外,就是與在快速排序程序中出錯

int a[] 

int a* 

,並提出一些資源explainatio的排序算法,宣佈在功能陣列之間的差異。

#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; 


} 
+2

'Pindex'只在'if'語句的範圍內聲明。一旦你添加了大括號,這將是明確的:'if(start

+1

作爲函數參數,'int a []'和'int * a'完全沒有區別。你甚至可以用一種方法聲明函數,然後用另一種方式定義它。 –

+0

a *會給出錯誤。 * a是一個指針。一個[10]是一個數組。 – stark

回答

1

查看所提供的源代碼後,主要問題位於Partition()函數中。 QuickSort()中的本地int Pindex與使用遞歸調用導致Segmantation Fault不同。

在疑難排解功能int Partition(int a[] ,int start, int last),輸入參數是startlast,但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; 
} 

然後糾正錯字快速排序,當所有工作。

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); 
    } 
}