반응형
※ 정렬은 오름차순 또는 내림차순으로 이루어지는데, 특별한 언급이 없으면 오름차순 정렬을 기본으로 한다.
버블정렬이란?
주어진 리스트의 왼쪽에서부터 모든 인접한 두 원소를 순서대로 비교하면서 자리바꿈을 통해 정렬된 순서를 맞추는 것을 반복함녀서 정렬하는 방식.
- 이름의 유래 -
이웃한 값끼리 비교하여 교환하는 모습이 마치 거품이 보글보글하는 모양과 비슷하다고 해서 붙여진 이름임.
버블정렬의 특징
1. 선택정렬에 비해 원소의 교환이 많이 발생하여 비효율적이다.
2. 안정적인 정렬이다.
- 인접한 두 데이터가 정렬되지 않은 경우에만 교환이 일어나므로 킷값이 같은 겨웅에는 교환이 일어나지 않는다.
3. 제자리 정렬이다.
- 데이터가 움직이는 경우는 두 원소를 서로 교환하는 경우밖에 없으므로, 데이터가 저장된 공간 이외에 별도의 공간을 상수 개만 사용한다.
#include<stdio.h>
int BubbleSort(int A[],int n){
int BOUND, temp, top, j;
BOUND= -1;
do{
top = n;
for(j=top-1; j>BOUND; j--){
if(A[j]<A[j-1]){
temp = A[j];
A[j] = A[j-1];
A[j-1] = temp;
top = j;
}
printf("%d단계를 출력 :", i);
for(int k=0; k<n; k++){ //정렬되는 과정 출력
printf("%d ", A[k]);
}
printf("\n");
}
BOUND = top;
}while(top<n);
}
int main(){
int n = 10;
int A[10];
printf("입력하세요 :");
for(int i= 0; i<n; i++){
scanf("%d",&A[i]);
}
BubbleSort(A, n);
for(int i=0; i<n; i++){
printf("%d ", A[i]);
}
}
/*
입력하세요 :1 3 2 5 4 7 6 0 8 9
0 1 2 3 4 5 6 7 8 9
--------------------------------
Process exited after 8.36 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
선택정렬 다음으로 제일 많이 사용하는 버블정렬.
그렇게까지 효율적이지도 않은데 많이 사용했었음. 이유는 없다. 그냥 이름이 귀여워서 그런가 물론 실제로는 귀엽지 않지만^^ 이름이라도 귀여우니까^^
반응형
'2019~2020 > 자료구조' 카테고리의 다른 글
삽입정렬이란 (0) | 2019.09.16 |
---|---|
선택정렬이란 (0) | 2019.09.11 |
최댓값 찾기 알고리즘 (0) | 2019.09.03 |
bfs-dfs (0) | 2019.08.26 |
행렬을 이용한 BFS (c) (0) | 2019.08.20 |