2016-12-15 54 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