2016-12-15 2 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 루프의 종료 조건에서 잘못된 사용법을 볼 수 있습니다. 변수 인덱스를 대신 사용해야하며 원래의 의도라고 생각합니다.

내가 설명한 교정 후 다른 main()을 사용하여 here을 관찰 할 수 있으므로 정렬 기능이 작동하는 것 같습니다. 아래에서 정렬 기능 의 정의가 이후에 수정 된 것을 볼 수 있습니다.

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

@ 당신을 환영합니다. 그래도 사람들 (자신을 포함하여)이 권장하는 방향으로 질문문을 업데이트하십시오. 다른 사람들도 앞으로 비슷한 오류가 발생할 수 있으며 관련 게시물을 쉽게 찾을 수 있어야합니다. 현재 귀하의 질문에 모호한 진술과 원래 문제가 무엇인지에 대한 명확하지 않은 점이 포함되어 있습니다. – ilim

+0

@Mishaal 또한 제공된 응답 중 하나에 만족할 경우 질문에 대한 답변으로 가장 만족스러운 질문을 선택하여 질문을 닫는 것을 잊지 마십시오. – ilim