#title 삽입정렬 [[TableOfContents]] ==== 기본구현 ==== {{{ #include #include void insert_sort(int*, int); int main(int argc, char *argv[]) { int i; int A[10] = {7,3,4,1,8,9,0,5,2,6}; insert_sort(A, sizeof(A)/4); for(i = 0; i < sizeof(A)/4; i++) { printf("A[%d] = %d\n", i, A[i]); } system("PAUSE"); return 0; } void insert_sort(int* data, int size) { int i,j,temp; for(i = 1; i < size; i++) { for(j = i; j > 0; j--) { if (data[j] < data[j-1]) { temp = data[j]; data[j] = data[j-1]; data[j-1] = temp; } } } } }}} for루프가 2개니까 O^^2^^인 알고리즘이네요. ==== 오름차순, 내림차순 ==== {{{ #include #include int insert_sort(int*, int, char*); int main(int argc, char *argv[]) { int i,size; int A[10] = {7,3,4,1,8,9,0,5,2,6}; size = sizeof(A)/sizeof(int); //insert_sort(A, size, "asc"); //insert_sort(A, size, "desc"); if (!insert_sort(A, size, "desc")) { for(i = 0; i < size; i++) { printf("A[%d] = %d\n", i, A[i]); } } system("PAUSE"); return 0; } int insert_sort(int* data, int size, char* order) { int i,j,temp; if (size <= 1) return 0; if ("asc" == order) { for(i = 1; i < size; i++) { for(j = i; j > 0; j--) { if (data[j] < data[j-1]) { temp = data[j]; data[j] = data[j-1]; data[j-1] = temp; } } } } else if ("desc" == order) { for(i = 1; i < size; i++) { for(j = i; j > 0; j--) { if (data[j] > data[j-1]) { temp = data[j]; data[j] = data[j-1]; data[j-1] = temp; } } } } else return 1; return 0; } }}} 오름차순, 내림차순하느라고 if가 들어갔습니다. 연산자를 "<"에서 ">"로만 바꾸면 되는데 말이죠. 좋은 방법없나? 쩝..