2017-01-01 30 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()関数に位置しています。ローカルint PindexQuickSort()は、再帰呼び出しを使用してセグメント・フォルトを引き起こすこと以上の問題ではありません。トラブルシューティング機能int Partition(int a[] ,int start, int last)

、入力引数はstartlastであるが、Pindexがインクリメントされるforループ、 はfor (int i=0;i<last;i++)あり続けるとPindexlastより大きく 最後反転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); 
    } 
} 
関連する問題