2012-10-17 3 views
2

필자의 삽입 정렬 구현은 첫 번째 요소를 정렬하는 것을 제외하고는 작동하는 것처럼 보입니다. 여기에 작은 테스트 케이스가 있습니다. 아무도 내 알고리즘에 문제가 있다고 말할 수 있습니까?삽입 정렬 첫 번째 요소를 정렬하지 않습니까?

#include <iostream> 
#include <string> 
#include <stdlib.h> 
using namespace std; 



void Insert(int *S, int k) 
{ 
     int key = S[k]; 
     int j = k-1; 
     while(j>0 && S[j] > key) 
     { 
       S[j+1] = S[j]; 
       j--; 
     } 

     S[j+1] = key; 
} 


void Insertionsort(int S[], int n) 
{ 
     if(n>1) 
       Insertionsort(S,n-1); 
     Insert(S,n); 

} 

int main() 
{ 
     srand (time(NULL)); 
     int S1_8[8]; 
     for(int i=0; i<8; i++) 
       S1_8[i] = rand()%100; 

     Insertionsort(S1_8,8); 

     for(int i=0; i<8; i++) 
     { 
       cout << S1_8[i] << endl; 
     } 

     return 0; 
} 
+0

그것은 문제를 설명하지 않습니다 수 있어야합니다 확인하지만, 문제는 확실히있다 마지막 반복에서'Insert (S, 8)'가 호출 될 때. 존재하지 않는 요소 인'S [8] '에 접근 할'Insert' 함수의 정의에 따라. – jogojapan

답변

5
Insert

처음 호출은 그것이

S[8]int key = S[8];을 통과하지 배열 범위 내의.

void Insertionsort(int S[], int n) 
{ 
     if(n>1) 
       Insertionsort(S,n-1); 
     Insert(S,n-1); 

} 

또한, 귀하의 동안 조건에서, 그것은

while(j>=0 && S[j] > key) 

Link to Code

+0

+1하지만 while 루프의 조건을'j> 0' 대신'j> = 0'으로 변경했습니다. 그것이 맞지만 대답에서 언급되고 설명되어야합니다. – jogojapan

+0

감사합니다. 'Insert'에 의한 구성 요소 별 비교 횟수를 계산하려면 while 루프 내부 또는 while 루프 외부에서 카운터를 증가시켜야합니까? – Zack

+0

while 루프 내에 있습니다. –

관련 문제