[C 기초 - 버블 정렬]

버블 정렬

정렬에는 버블 정렬, 삽입 정렬, 힙 정렬, 퀵 정렬 등 여러가지가 있는데, 버블 정렬이란 가장 간단한 정렬 알고리즘으로, 서로 이웃한 값들을 비교하여 큰 값을 뒤로 넘기며 정렬합니다.

int arr[5] = {14, 12, 1, 5, 10}

위와 같은 배열에 버블 정렬을 적용시켜보자.

  • arr[0]과 arr[1]의 값을 비교한다. (14와 12의 값을 비교)
  • arr[0]이 arr[1]보다 더 크므로 arr[0]과 arr[1]을 바꾼다.
  • 배열의 상태: {12, 14, 1, 5, 10}
  • 다음은 arr[1]과 arr[2]를 비교. (14와 1을 비교)
  • arr[1]이 arr[2]보다 더 크므로 arr[1]과 arr[2]를 바꾼다.
  • 배열의 상태: { 12, 1, 14, 5, 10 }
  • 위 과정을 쭈욱 반복하면 배열의 상태는 다음과 같이 된다.
  • 배열의 상태: { 12, 1, 5, 10, 14 }
  • 처음으로 돌아와 계속해서 정렬을 반복
  • 최종적으로 배열은 다음과 같이 정렬
  • 배열의 상태: { 1, 5, 10, 12, 14 }

버블 정렬은 이처럼 인접한 두 값을 비교해나가면서 큰 수를 계속해서 뒤로 보내는 방법이다.

변수 선언하기


#include <stdio.h>

int main()
{
	int arr[10] = { 9, 17, 5, 6, 124, 112, 1, 3, 87, 55 };

	int temp; // 두 값을 바꿀 때 사용할 변수
	int length = sizeof(arr) / sizeof(int);

	printf("정렬 전 : ");
	for(int i = 0; i < length; i++)
	{
		printf("%d ", arr[i]); 
	}

	for(int i = 0; i < length - 1; i++)
	{
		for(int j = 0; j < length -1 -i; j++)
		{
			if(arr[j + 1] < arr[j])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}

	printf("\n정렬 후 : ");
	for(int i = 0; i < length; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

좋은 웹페이지 즐겨찾기