Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 수광 소자
- directx
- LineTracer
- 컴퓨터 그래픽스
- set
- priority_queue
- Array
- list
- Deque
- arduino compiler
- 라인트레이서
- 통계학
- 시스템프로그래밍
- Visual Micro
- Arduino
- C언어
- Algorithm
- WinAPI
- stl
- 아두이노 컴파일러
- map
- 자료구조
- Stack
- 운영체제
- html
- c++
- vector
- 아두이노
- queue
- 아두이노 소스
Archives
- Today
- Total
Kim's Programming
[정렬 알고리즘]Bubble Sorting - 버블정렬 본문
버블정렬은 인접한 자료 2개를 비교하여 정렬해가는 정렬 알고리즘입니다. 버블정렬은 정렬될때 데이터들이 움직이는 모습이 거품이 올라오는거 같다고 하여 버블 정렬이라 하며 시간복잡도는 BigO(n^2)인 알고리즘입니다.
버블 정렬은 다음과 같은 과정을 거치게 됩니다.
- 제일 왼쪽부터 값을 비교하여 왼쪽이 큰 경우 오른쪽의 값과 교체합니다
- 모든 자료들에 대하여 전부 수행반복합니다(1pass)
- 정렬이 끝날때 까지 1,2번을 반복 수행합니다.
또한 버블정렬에서는 최적과 과정을 통해서 두가지 경우의 낭비를 방지합니다.
- 자료가 정렬이 되어있는 경우엔 정렬을 끝낸다.
자료가 정렬되어있는 경우에 할 필요없는 비교를 전체적으로 수행하기 떄문에 1pass동안에 어떠한 변경이 없다면 정렬이 되었음을 확인하고 종료합니다. - 정렬된 데이터에 대해서는 비교하지 않는다.
1pass가 지난후에 가장 가장 마지막의 데이터는 정렬된 데이터이기 때문에 매 pass마다 이를 제외하고 비교합니다.
버블정렬을 애니메이션은 다음과 같이 나타나게 됩니다.(거품이 올라가는거 같나요?)
버블정렬은 프로그래밍으로 다음과 같이 나타낼 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include<iostream> void Print(int TargetArray[], int Length) //출력을 위한 함수 { for (int i = 0; i < Length; i++) std::cout << TargetArray[i] << " "; std::cout << std::endl; } void Swap(int *Target_Left, int *Target_Right) //값 교체를 위한 함수 { int Temp; Temp = *Target_Right; *Target_Right = *Target_Left; *Target_Left = Temp; } void BubbleSort(int TargetArray[],int Length) //버블 정렬 함수 { bool Change = false; //최적화용 변수 for (int pass = 0; pass <= Length+1; pass++) //1pass { for (int i = 0; i < Length-pass-1; i++) //(제일 끝엔 정렬이 된 숫자가 들어감 - 최적화) { if (TargetArray[i] > TargetArray[i + 1]) { Swap(&TargetArray[i], &TargetArray[i + 1]); Change = true; } Print(TargetArray, Length); } if (Change == false) //값 교체가 없으면 정렬이 끝난걸로 간주한다(최적화) return; } } void main() { int Array[5] = { 9,7,5,3,1 }; BubbleSort(Array, 5); std::cout << "최종 결과 : "; Print(Array, 5); } | cs |
결과는 다음과 같습니다.
'Programming > Algorithm' 카테고리의 다른 글
[정렬 알고리즘]Insert Sorting - 삽입정렬 (0) | 2016.07.18 |
---|---|
[정렬 알고리즘]Select Sorting - 선택정렬 (0) | 2016.07.18 |