easy software

C언어 Bubble Sort(버블정렬) 예제 본문

C언어/포인터와 배열

C언어 Bubble Sort(버블정렬) 예제

JAVA 웹개발자 2015. 1. 23. 17:18

이번 시간에는 Bubble Sort(버블정렬)을 해보도록 하겠습니다.

 

버블정렬을 혹시 모르시는 분이 계실 수 있으니, 간단하게 개념을 집고 넘어가겠습니다.

 

 

 

 

위의 사진을 예로들어서 설명하겠습니다.

 

정렬이란 단어를 모르는 분은 없을거라 믿습니다만, 혹시 모를수도 있으니 간단히 설명드리겠습니다.

 

값이 4 3 5 1 2 가 있습니다.

 

위의 값을 오름차순(ascending order)정렬한다면, 1 2 3 4 5 가 될 것이고

 

내림차순(descending order)정렬한다면, 5 4 3 2 1 이 될 것입니다.

 

버블정렬이란, 정렬되는 과정이 마치 거품이 일어나는 모습과 유사해서 붙어진 이름입니다.

 

위의 그림은, 버블정렬을 오름차순으로 하는 그림인데

 

step1에서 -2와 45를 비교합니다.

 

45가 더 크니, 각자 자리를 고수합니다.

 

그 이후에 45와 0을 비교합니다.

 

이번엔 45가 더큰데 0보다 앞에있죠?

 

그렇기 때문에 서로 자리를 바꿔줍니다.

 

이렇게 오름차순으로 버블정렬을 할 때에는, 하나하나씩 크기를 비교하면서 정렬을 해나갑니다.

 

step1의 정렬이 종료되면, 다시 한번 더 버블정렬을 진행해줍니다.

 

이런식으로 총 5개의 값을 비교해야 할 때에는 4번의 반복과정을 거치게 됩니다.

 

값이 6개면 5번의 반복과정을 거치게 되겠지요.

 

여기서 문제입니다.

 

오름차순이 아닌 내림차순으로 버블정렬을 해보겠습니다.

 

1. 길이가 7인 배열을 선언합니다.

 

2. 사용자로부터 7개의 정수를 입력받아 배열에 저장합니다.

 

3. 버블정렬을 수행하는 함수를 구현하고, 버블정렬을 합니다.

 

4. 버블정렬된 값을 출력합니다.

 

아래코드를 보시죠.

 

#include <stdio.h>

 

void DesSort(int* ptr){

 

 int temp;//배열의 값을 저장할 임시변수

 

     for (int i = 0; i < 6; i++)//배열의 크기인7이 아닌 6만큼 반복함

          for (int j = 0; j < 6 - i; j++){

               if (ptr[j] < ptr[j + 1]){
                    temp = ptr[j + 1];
                    ptr[j + 1] = ptr[j];
                    ptr[j] = temp;
               }
         }
    }

 

int main(void){

 

     int input;
     int arr[7];

 

     //사용자로부터 7개의 정수를 입력받음
     for (int i = 0; i < 7; i++){
          printf("?: ");
          scanf_s("%d", &input);
          arr[i] = input;
     }

 

     DesSort(arr); //배열을 내림차순정렬하기 위해 함수 호출

 

     for (int i = 0; i < 7; i++)
          printf("%d ", arr[i]);

 

     return 0;


}

Comments