본문 바로가기

ETC Programmings

Transposition Sort + Swap Cursor

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

정렬하는 과정을 여실히 보여주는 커서를 적용한 전위정렬 함수..
후후.. 과제였는데 생각보다 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);
}