버블정렬이란 ?
버블정렬은 큰 수가 떠오르는 것처럼 보여서 지어진 이름이라고 알고 있습니다.
왼쪽을 바닥, 오른쪽을 수면이라고 한다면 큰 수가 점차 수면으로 떠오르는 거죠.
버블정렬 알고리즘
버블 정렬은 위의 그림처럼 제일 앞의 수부터 2개씩 비교를 합니다.
앞의 수가 뒤의 수보다 더 크면, 자리를 바꿔줍니다.
검은색 볼펜으로 1, 2, 3
빨간색 볼펜 4,5
파란색 볼펜 6
이렇게 총 6단계를 거칩니다.
버블 정렬의 복잡도는 ( n(n-1) )/2를 갖게됩니다. 선택정렬이랑 같죠 ?
버블정렬 소스
#include <stdio.h>
/*
버블 정렬
*/
main()
{
int number[] = {5,3,4,1,2}; //숫자 입력
int max = sizeof(number)/sizeof(int) - 1; //최종 인덱스 값
int count = 0; //단계 구분 count
/*
number_size를 주지 않고 sizeof(number)/sizeof(int)를 사용하였다.
sizeof(number) = number라는 변수를 갖는 배열에 할당되어 있는 크기를 반환해준다.
int는 4바이트, 배열에 10개의 변수가 저장되어 있다면 40을 리턴해준다.
따라서 sizeof(int)로 나누어주었다.
※자료형은 컴퓨터 운영체제에 따라 다를 수 있다.
*/
for (int i = 0; i < (sizeof(number)/sizeof(int)) -1; i++) {
printf("%d단계\n",++count);
for (int j = 0; j < max; j++) //인덱스 값은 0부터 시작하기 때문에 -1,
//ex){1,2,3,4}를 갖는 배열의 리턴값은 4이지만
//index값으로는 0,1,2,3이기때문에 -1해줌
{
if (number[j] > number[j+1]) //왼쪽의 수가 오른쪽 보다 크다면 서로 수를 교환
{
int temp = number[j]; //교환 알로리즘
number[j] = number[j+1];
number[j+1] = temp;
}
for (int k = 0; k <= (sizeof(number)/sizeof(int))-1; k++) //출력
{
printf("%d ", number[k]);
}
printf("\n");
}
max = max - 1; //제일 오른쪽(제일 큰수)이 정렬 되었기때문에 그쪽은 더 이상 비교하지 않음
}
}
버블정렬 결과
input_number = 5,3,4,1,2
input number = 99,100,1,50,57,86,30,54,3215,10
배열의 0번 인덱스부터 최종인덱스까지 비교를 한번 했을 때, 단계를 증가시키도록 코딩하였습니다(보기 편할까 해서요 ㅎ)
두 결과 모두 작은수부터 큰 수로 정렬되었습니다.
버블 정렬은 큰 수가 점차 떠오르는 정렬이라는 점 기억하세요.
이상으로 c언어 버블 정렬 포스팅을 마치겠습니다.
'IT프로그래밍' 카테고리의 다른 글
[C언어]C언어 독학 001 / C언어 강좌 001 / C언어 기초 001[프로젝트 만들기] (0) | 2017.05.22 |
---|---|
[c#]delegate 사용 기초 (0) | 2016.12.09 |
Java exe파일 만들기 / JSmooth (0) | 2015.05.24 |
자바) 변수의 종류, 자바 변수의 종류 정리, 자바 변수 종류 (0) | 2015.04.18 |
c언어 두 점 사이의 거리 / 두 점 사이의 거리 구하는 c언어 알고리즘 (0) | 2015.01.30 |
c언어 최대공약수 c언어 최소공배수 / c언어 최소공배수 최대공약수 / c언어 최대공약수 소스 / c언어 최소공배수 소스 (0) | 2015.01.30 |
c언어 약수 출력 / c언어 약수 소스 / c언어 약수 알고리즘 (3) | 2015.01.30 |
c언어 소수 / c언어 소수 구하기 / c언어 Prime number / c언어 소수 소스 (3) | 2015.01.27 |
댓글