2017-09-11 2 views
1

Die Struktur Struktur istImplementieren Bubble Sort einen Zeiger mit

struct student 
{ 
    char name[10]; 
    int roll; 
    int percent; 
}; 

struct student s[5]; 
struct student *p; 

Die obige Erklärung Global ist. Und das ist meine Bubble-Sort-Funktion.

void sort(int n) 
    { 
    int i,j,k; 
    struct student temp; 
    for(i=0;i<=(n-2);i++) 
    { 
     for(j=0;j<(n-i-1);j++){ 
     if((p+j)->percent>(p+j+1)->percent){ 
//Define the temp variable of Structure type 
     temp=*(p+j);//Interchange s[j] and s[j+1] 
     *(p+j)=*(p+j+1); 
     *(p+j)=temp; 
      } 
     } 
    } 

Ich mag den Punkt-Operator zu vermeiden, mit Elementen der Struktur zuzugreifen Die temporäre Variable für Swapping des Strukturtypen deklariert wurde. Diese Blasensortierfunktion funktioniert nicht. Dies sind die Zeilen, in denen ich denke, dass ich versaut habe. Bitte weisen Sie auf den Fehler hin.

if((p+j)->percent>(p+j+1)->percent){ 
      temp=*(p+j);//Interchange s[j] and s[j+1] 
      *(p+j)=*(p+j+1); 
      *(p+j)=temp; 
+0

Was ist die Frage? Sie scheinen den Punktoperator vermieden zu haben. Funktioniert der Code nicht? – Mitchel0022

+0

Bitte weisen Sie auf den Fehler hin, falls vorhanden, die Bubble-Sortierfunktion funktioniert nicht. Ich hatte die gleiche Funktion mit dem Punktoperator geschrieben und dieser funktioniert. Habe ich irgendwo die Syntax durcheinandergebracht? – KshitijV97

+0

es funktioniert nicht wie in wird nicht kompilieren oder funktioniert nicht in seiner nicht sortiert? – Mitchel0022

Antwort

1

Die Swap-Logik ist falsch, zuerst setzen Sie temp * (p + j), dann setzen Sie * (p + j) zu * (p + j + 1), aber dann machen Sie einen Fehler gemacht und schreibe einfach wieder auf * (p + j). Ich glaube Ändern

*(p+j)=temp; 

zu

*(p+j+1)=temp; 

sollte es beheben

1

Ein offensichtliches Problem ist Ihr Austausch Logik:

if((p+j)->percent>(p+j+1)->percent){ 
    temp=*(p+j);//Interchange s[j] and s[j+1] 
    *(p+j)=*(p+j+1); 
    *(p+j)=temp; 
} 

Die endgültige Zuordnung zu dem falschen Element ist, und tut nichts mehr als die vorherige Aufgabe umzukehren. Ändern Sie es zu:

if((p+j)->percent>(p+j+1)->percent){ 
    temp=*(p+j);//Interchange s[j] and s[j+1] 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
}