정렬하는 과정을 여실히 보여주는 커서를 적용한 전위정렬 함수..
후후.. 과제였는데 생각보다 1시간? 여 걸려서 완성했다.. 프로그래밍을 하는 이유..
이런 짜릿함이 아닌가 >ㅅ<;;
/********************************************************
국민대학교 비즈니스 IT 학부 4학년 20031186 남한산
프로그래밍 언어, 강동욱교수님 : 연습문제 9-13 과제물
*********************************************************/
# include <stdio.h>
/*
전위 정렬 함수, array는 정렬을 할 배열, cursor는 바뀌게될 요소들을 가르키는 컷의 배열, size는 array 배열의 크기이다.
*/
void transpositionSort(int array[], int cursor[], int size);
/*
요소의 위치를 바꾸는 함수, base와 target의 레퍼런스를 교환한다.
*/
void swap(int *base, int *target);
/*
배열의 요소들을 보여주는 함수
*/
void display(int array[], int size);
/*
커서의 모습을 보여주는 함수
*/
void displayCursor(int array[], int size);
/*
커서를 초기화 하는 함수
*/
void initCursor(int cursor[], int size);
void transpositionSort(int array[], int cursor[], int size){
int i,j;
for (i = 0; i < size; ++i){
for (j = i + 1; j < size; ++j){
if(array[i] > array[j]) {
initCursor(cursor, size); // 커서를 모두 0으로 초기화한다.
swap(&array[i], &array[j]); // 두 요소의 자료를 교환한다.
cursor[i] = 1; // 바뀌게 된 요소를 가리키기 위해서 1로 바꾼다.
cursor[j] = 1;
printf("Cursor>> ");
displayCursor(cursor,size); // 커서의 모습을 출력한다.
printf(" ");
display(array,size);
}
}
printf("After Pass %d : " ,i);
display(array,size);
}
}
void swap(int* base, int* target){
int temp = *base;
*base = *target;
*target = temp;
}
void display(int array[], int size){
int i;
for (i = 0 ; i < size ; i++)
printf("%d ", array[i]);
printf("\n");
}
void displayCursor(int array[], int size){
int i;
for (i = 0 ; i < size ; i++)
if (array[i] == 1){ // 커서의 요소가 1인 경우 (다시말해, 바뀌게 되는 대상인 경우)
printf("-- ");
}
else // 커서의 요소가 0인 경우에는 바뀌게 된 요소가 아니다.
printf(" ");
printf("\n");
}
void initCursor(int cursor[], int size){
int i;
for (i = 0; i < size; i++){ // 모두 swap 함수가 호출되지 않는 경우
cursor[i] = 0;
}
}
int main(){
int numArray[] = { 7, 3, 66, 3, -5, 22, -77, 2 };
int cursor[8] = { 0 };
int size = sizeof(numArray) / sizeof(int);
printf("Unsorted Data : ");
display(numArray, size);
transpositionSort(numArray, cursor, size);
}