void insertion_sort(int list[], int n)
{
int i, j;
int key;
for (i = 1; i < n; i++) {
key = list[i];
for (j = i - 1; j >= 0 && (list[j]> key); j--) //조건문 맨 뒤에 비교횟수++추가?
{
list[j + 1] = list[j];
}
list[j + 1] = key;
}
}
---
위 삽입정렬 코드에
count_comp = 0, count_move = 0;
비교횟수와 이동횟수를 카운트하는걸 넣으려고 하는데 진짜 이거 어디에 넣어야할지 감이 안오네요 해봐도 틀린거같고...
일단 비교횟수는 주석달아놓은것처럼 for문쪽에 다는거같기도 한데 하 미치겠네요 혹시 고수님들잇으면 조언좀 부탁드립니다.
아래 쉘정렬도 마찬가진데 이것도 어디다가 카운터를 넣어야 제대로 너무 헷갈리네요
----
//gap만큼 떨어진 요소들을 삽입정렬
//정렬의 범위는 first~last
inc_insertion_sort(int list[], int first, int last, int gap)
{
int i, j, key;
for(i=first+gap; i<=last; i=i+gap){
key = list[i];
for(j=i-gap; j>=first && key<list[j];j=j-gap)
list[j+gap]=list[j];
list[j+gap]=key;
}
}
void shell_sort( int list[], int n ) // n = size
{
int i, gap;
for( gap=n/2; gap>0; gap = gap/2 ) {
if( (gap%2) == 0 ) gap++;
for(i=0;i<gap;i++) // 부분 리스트의 개수는 gap
inc_insertion_sort(list, i, n-1, gap);
}
}