2016-12-15 94 views
-2

我從mycodeschool學到了這個實現,該方法對我來說似乎沒問題,因爲那裏的教師是如何教導的,我做了相同的實現,但不知何故,我的代碼給出了一個問題,也請只是忽略時間函數,因爲錯誤是在別的地方。我刪除它,錯誤仍然是一樣的。我的插入排序代碼有問題

//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

聽起來好像您可能需要學習如何使用調試器來逐步執行代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

我看到交換沒有正確完成你的情況。 –

+3

「給一個問題」...你至少可以具體說明問題所在。 – crashmstr

回答

1

我能看到的一個錯誤是你在while循環的終止條件中錯誤地使用了我。您應該使用變量索引,我相信這也是您的初衷。

在我描述的修正後,您的排序功能似乎正常工作,您可能會注意到here,使用不同的main()。下面,你可以看到之後的排序功能的定義。

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

謝謝sooooooo了,我意識到我的錯誤,這是一個錯誤,保持祝福:') – Mishaal

+0

@ Mishaal不客氣。儘管如此,試着按照人們(包括我自己)推薦你的方向更新你的問題陳述。其他人將來可能會面臨類似的錯誤,他們應該能夠以簡單的方式找到相關的帖子。目前你的問題含有模糊的陳述和不清楚你的原始問題是什麼。 – ilim

+0

@Mishaal另外,如果您對所提供的回覆之一感到滿意,請不要忘記通過選擇一個最滿意的回答來解決您的問題。 – ilim