삽입정렬 알고리즘 질문입니다.
글쓴이: nayana / 작성시간: 금, 2004/04/23 - 6:40오후
#include<stdio.h> #define N 100 void indirect_insert_sort( int score[], int index[], int n ); int main( void ) { int i, n, score1[N], index1[N]; printf("Number of data ?\t "); // 입력할 데이터 갯수 scanf("%d", &n); for( i = 0; i < n; i++ ) // 데이터 갯수에 맞게 데이터 입력 { printf("score[%d] = ", i); scanf("%d", &score1[i]); } indirect_insert_sort( score1, index1, n ); for( i = 0; i < n; i++ ) printf( "(%d)\t %d\n", i + 1, score1[ index1[i] ] ); return 0; } void indirect_insert_sort( int score[], int index[], int n ) { int i, j, t; for( i = 0; i < n; i++ ) index[i] = i; for( i = 1; i < n; i++ ) { t = index[i]; j = i; while( score[ index[j - 1] ] > score[t] && j > 0 ) { index[j] = index[j - 1]; j--; } index[j] = t; } }
입력을 132라고 정렬이 잘되는데..
입력을 213 또는 321 이라고하면 세그먼테이션이 떨어집니다.
Forums:
흠.. 그냥 봐도 에러날꺼 같은데요...213이면.... 처음부터 w
흠.. 그냥 봐도 에러날꺼 같은데요...
213이면.... 처음부터 while문이 돌아가는건데.. j-- 를 하면.. j=0이 되는데.. 거기서 index[j-1]을 부르면.. index[-1] .....
에러 날꺼 같군요..
공부 하시는건가요?아니면 그냥 퀵소트를,,, :?
공부 하시는건가요?
아니면 그냥 퀵소트를,,, :?
index [] 에 1씩 증가하면서 넣는건가요?,,, 그럼 구지 배열에
index [] 에 1씩 증가하면서 넣는건가요?,,, 그럼 구지 배열에 1,2,3,4,를 널필요가,,,
이 소스는 삽입정렬의 전략 일뿐입니다.i=1j=iwhi
이 소스는 삽입정렬의 전략 일뿐입니다.
i=1
j=i
while(a[j-1]>a[i] && j>0)
{
a[j]=a[j-1]
j--
a[j]=a[i]
i++
}
일단 삽입정렬에 대해서 공부하고 있는중입니다.삽입정렬 약간개선(?)
일단 삽입정렬에 대해서 공부하고 있는중입니다.
삽입정렬 약간개선(?) 시켜서 간접정렬로 바꾸고 있는중입니다.
처음 부터 while 문 돌긴 하지만 j > 0 으로 j가 음수가 되면
while문을 빠져나오게 하였는데...그러면..이상이 없는것이
아닌가요...^^;
댓글 달기