2017-01-01 1 views
-4

Fehler "Pindex" wurde in diesem Bereich nicht deklariert. (Linie 15)
Auch, was ist der Unterschied zwischen erklärt das Array in der Funktion mitFehler in Quick Sort-Programm

int a[] 

und

int a* 

Und einige Ressourcen für explainatio von Sortieralgorithmen vor.

#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 'wird nur im Rahmen der' if'-Anweisung deklariert. Dies wäre klar, wenn Sie geschweifte Klammern hinzufügen: 'if (start

+1

Als Funktionsparameter gibt es absolut keinen Unterschied zwischen' int a [] 'und' int * a'. Sie können die Funktion sogar in eine Richtung deklarieren und dann anders definieren. –

+0

a * gibt einen Fehler. * a ist ein Zeiger. a [10] ist ein Array. – stark

Antwort

1

Nachdem in dem bereitgestellten Quellcode suchen, ist das Hauptproblem in der Funktion Partition() entfernt. Die lokale int Pindex in QuickSort() ist kein Problem mehr als die Verwendung rekursiver Aufruf, um eine Segmantation Fault zu verursachen.

In dem Ratgeber Funktion int Partition(int a[] ,int start, int last) sind die Eingabeargumente start und last, aber die for-Schleife, wo Pindex weiter inkrementierten for (int i=0;i<last;i++) sein und werden eine Pindex größer als last und die letzte Invertierung verursachen a[Pindex]=a[last]; werden einen Schreibfehler verursachen.

Die for-Schleife ist auf dem gleichen Bereich der Eingabeargumente wie folgt durchgeführt werden:

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

Dann werden alle Arbeits wird, wenn die Schreibfehler QuickSort korrigieren.

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