홈 > IT > IT정보
IT정보

C언어 함수, 포인터, 동적할당 문제풀기 4-15

3 realdragonhead 0 375 1 0

4-15. 정수형 1차원 배열을 매개변수로 입력받아서 버블 정렬(bubble sort) 알고리즘을 이용하여 오름차순으로 정렬하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고 배열 입출력 함수를 이용하여 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#define size 10


void arrayprint(int * );
void bubblesort(int * );
void main() {
        int * usrinputarray = (int *)malloc(sizeof(int)*size);
        printf("길이가 %d인 1차원 배열에 값을 입력하면 버블정렬로 오름차순으로 정렬해줍니다.\n", size);


        for(int r=0; r<size; r++) {
                printf("%d번재 값 입력 : ",r+1);
                scanf("%d", &usrinputarray[r]);
        }
        fputs("입력한 값 : ", stdout);
        arrayprint(usrinputarray);


        bubblesort(usrinputarray);
        fputs("결과 : ", stdout);
        arrayprint(usrinputarray);
        free(usrinputarray);
}


void bubblesort(int * targetarray) {
        int temp;
        for(int j=0; j<size-1; j++) {
                for(int i=0; i<size-j-1; i++) {
                        temp = targetarray[i];
                        if(targetarray[i]>targetarray[i+1]) {
                                temp=targetarray[i];
                                targetarray[i]=targetarray[i+1];
                                targetarray[i+1]=temp;
                        }
                }
        }
}




void arrayprint(int * fun2array) {
        static int funcounter = 0;      //재귀함수 반복횟수 저장을 위한 변수 static 선언.
        if(funcounter == size) {
                puts(" ");      //개행
                funcounter=0;
                return ;
        }
        printf("%d ", fun2array[funcounter]);
        funcounter++;
        arrayprint(fun2array);
}


<RESULT>

[case 1]

길이가 10인 1차원 배열에 값을 입력하면 버블정렬로 오름차순으로 정렬해줍니다.

1번재 값 입력 : 21

2번재 값 입력 : 10

3번재 값 입력 : 86

4번재 값 입력 : 5

5번재 값 입력 : 12

6번재 값 입력 : 7

7번재 값 입력 : 11

8번재 값 입력 : 13

9번재 값 입력 : 15

10번재 값 입력 : 64

입력한 값 : 21 10 86 5 12 7 11 13 15 64

결과 : 5 7 10 11 12 13 15 21 64 86

[case 2]

길이가 10인 1차원 배열에 값을 입력하면 버블정렬로 오름차순으로 정렬해줍니다.

1번재 값 입력 : 20

2번재 값 입력 : 20

3번재 값 입력 : 41

4번재 값 입력 : 76

5번재 값 입력 : 8

6번재 값 입력 : 80

7번재 값 입력 : 22

8번재 값 입력 : 12

9번재 값 입력 : 9

10번재 값 입력 : 50

입력한 값 : 20 20 41 76 8 80 22 12 9 50

결과 : 8 9 12 20 20 22 41 50 76 80


4-15A. 정수형 1차원 배열을 매개변수로 입력받아서 선택 정렬(selection sort) 알고리즘을 이용하여 오름차순으로 정렬하는 함수를 작성하시오. main() 함수에서 이 함수를 호출하고 배열 입출력 함수를 이용하여 결과를 출력하시오.

<CODE>

#include <stdio.h>
#include <stdlib.h>
#define size 10


void arrayprint(int * );
void selectionsort(int * );
void main() {
        int * usrinputarray = (int *)malloc(sizeof(int)*size);
        printf("길이가 %d인 1차원 배열에 값을 입력하면 선택정렬로 오름차순으로 정렬해줍니다.\n", size);


        for(int r=0; r<size; r++) {
                printf("%d번재 값 입력 : ",r+1);
                scanf("%d", &usrinputarray[r]);
        }
        fputs("입력한 값 : ", stdout);
        arrayprint(usrinputarray);


        selectionsort(usrinputarray);
        fputs("결과 : ", stdout);
        arrayprint(usrinputarray);
        free(usrinputarray);
}


void selectionsort(int * targetarray) {
        int temp, correct=0;
        int least,leastindex;
        for(int r=0; r<size-1; r++) {
                least=targetarray[r];
                for(int j=r+1; j<size; j++) {
                        if(least>targetarray[j]) {
                                least=targetarray[j];
                                leastindex=j;
                                correct=1;
                        }
                }
                if(correct==1) {
                        temp=targetarray[r];
                        targetarray[r]=targetarray[leastindex];
                        targetarray[leastindex]=temp;
                        correct=0;
                }
        }


}




void arrayprint(int * fun2array) {
        static int funcounter = 0;      //재귀함수 반복횟수 저장을 위한 변수 static 선언.
        if(funcounter == size) {
                puts(" ");      //개행
                funcounter=0;
                return ;
        }
        printf("%d ", fun2array[funcounter]);
        funcounter++;
        arrayprint(fun2array);
}


<RESULT>

[case 1]

길이가 10인 1차원 배열에 값을 입력하면 선택정렬로 오름차순으로 정렬해줍니다.

1번재 값 입력 : 17

2번재 값 입력 : 66

3번재 값 입력 : 34

4번재 값 입력 : 8

5번재 값 입력 : 101

6번재 값 입력 : 22

7번재 값 입력 : 43

8번재 값 입력 : 7

9번재 값 입력 : 2

10번재 값 입력 : 152

입력한 값 : 17 66 34 8 101 22 43 7 2 152

결과 : 2 7 8 17 22 34 43 66 101 152

[case 2]

길이가 10인 1차원 배열에 값을 입력하면 선택정렬로 오름차순으로 정렬해줍니다.

1번재 값 입력 : 102

2번재 값 입력 : 4

3번재 값 입력 : 53

4번재 값 입력 : 67

5번재 값 입력 : 18

6번재 값 입력 : 32

7번재 값 입력 : 814

8번재 값 입력 : 2

9번재 값 입력 : 561

10번재 값 입력 : 2018

입력한 값 : 102 4 53 67 18 32 814 2 561 2018

결과 : 2 4 18 32 53 67 102 561 814 2018

0 Comments
Category
State
  • 현재 접속자 51 명
  • 오늘 방문자 33 명
  • 어제 방문자 716 명
  • 최대 방문자 948 명
  • 전체 방문자 180,498 명
  • 전체 게시물 1,951 개
  • 전체 댓글수 249 개
  • 전체 회원수 114 명
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand
PlusFriend Chat