2016-12-15 1 views
-2

Ich habe diese Implementierung von mycodesschool gelernt, die Methode scheint mir in Ordnung zu sein, denn so unterrichtet der Lehrer dort und ich habe die gleiche Implementierung gemacht, aber irgendwie gibt mein Code auch ein Problem ignoriere einfach die Zeitfunktion, weil der Fehler irgendwo anders ist. Ich habe es entfernt und der Fehler ist immer noch derselbe.Da stimmt etwas nicht mit meiner Einfüge-Nummer

//insertion sort 
    #include<iostream> 
    #include <ctime> 
    using namespace std; 
    class insertion{ 
    public: 
     insertion(){} //constructor 
     void sort(int a[], int n) { //insertion sort function 
      for (int i = 1; i < n; i++) { 
       int value = a[i]; 
       int index = i; 
       while (i > 0 && a[i - 1] > value) { 
        a[index] = a[index - 1]; 
        index=index-1; 
       } 
       a[index] = value; 
      } 
     } 

     //display function 
     void display(int a[], int n) { 
      for (int i = 0; i < n; i++) { 
       cout << a[i] << endl; 
      } 
     } 
    }; 
    void main(){ 
     insertion ins; 
     int a[10]; 
     int n = 10; 
     cout << "Enter the elements:" << endl; 
     for (int i = 0; i < n; i++) { 
      cin >> a[i]; 
     } 
     unsigned int start = clock(); //measuring time of sort from here 
     cout << "waiting for keyhit"; 
     cin.ignore(); 
     ins.sort(a, n); 
     ins.display(a, n); 
     cout << "Time taken in millisecs: " << clock() - start; //to here 
     cin.ignore(); 
    } 
+4

Es klingt wie Sie müssen lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+0

Ich sehe das Austauschen ist nicht ordnungsgemäß in dein Fall. –

+3

"Geben Sie ein Problem" ... Sie könnten zumindest genau angeben, was das Problem ist. – crashmstr

Antwort

1

Ein Fehler, den ich sehen konnte, ist Ihre falsche Verwendung von i in Ihrer while-Schleife Abbruchbedingung. Sie sollten stattdessen den Variablenindex verwenden, was meiner Meinung nach auch Ihre ursprüngliche Absicht war.

Nach der Korrektur, die ich beschrieben habe, scheint Ihre Sortierfunktion zu funktionieren, wie Sie here mit einem anderen main() beobachten können. Unten können Sie die Definition der Sortierfunktion nach diese Korrektur sehen.

void sort(int a[], int n) { //insertion sort function 
    for (int i = 1; i < n; i++) { 
     int value = a[i]; 
     int index = i; 
     while (index > 0 && a[index - 1] > value) { 
      a[index] = a[index - 1]; 
      index=index-1; 
     } 
     a[index] = value; 
    } 
} 
+0

Vielen Dank, ich erkannte meinen Fehler, es war ein Fehler, bleib gesegnet: ') – Mishaal

+0

@ Mishaal Gern geschehen. Versuchen Sie dennoch, Ihre Frage in der Richtung zu aktualisieren, in der Sie von Leuten (einschließlich mir selbst) empfohlen werden. Andere Menschen könnten in Zukunft ähnlichen Fehlern gegenüberstehen und sollten in der Lage sein, relevante Beiträge auf einfache Weise zu finden. Derzeit enthält Ihre Frage vage Aussagen und unklare Punkte, was Ihr ursprüngliches Problem war. – ilim

+0

@Mishaal Auch wenn Sie mit einer der Antworten zufrieden sind, vergessen Sie nicht, Ihre Frage zu schließen, indem Sie diejenige auswählen, die am befriedigendsten ist, als die Antwort auf Ihre Frage. – ilim

Verwandte Themen