선택 정렬(Selection Sort)
-배열의 요소 중 최댓값 or 최솟값을 골라서(Selection),
배열의 가장 끝의 요소와 교환 하는 정렬 -
총 n개의 데이터가 있다면, 교환 횟수는 많아야 n-1번
비교 횟수는 n(n-1) / 2번, 시간 복잡도는 O(n^2)이다.
비교 횟수가 버블 정렬과 같다는 특징이 있다.
-Sample Source-
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
int main() | |
{ | |
int Array[5] = {7,12,3,2,1 }; //정렬되지 않은 배열 | |
int MinVar, TempVar, Index; //최소값, 임시 변수, 최소값이 있는 인덱스 | |
cout <<" [0]" << "[1]" << "[2]" << "[3]" << "[4]" << endl; //인덱스 번호 표 | |
for (int i = 0; i < 4; i++) //정렬 루프 | |
{ | |
MinVar = Array[i]; //일단 첫번째 최소값은 정렬되지 않은 배열의 맨 앞 값을 넣어준다. | |
for (int j = i + 1; j < 5; j++) //최소값 결정 루프 | |
{ | |
if (MinVar > Array[j]) //만약 MinVar에 있는 값보다 크면 | |
{ | |
MinVar = Array[j]; //MinVar에 더 작은값을 넣는다 | |
Index = j; //해 당인덱스 번호 저장 | |
} | |
} | |
if (MinVar != Array[i]) //만약 최소값이 변경 되었다면 교환 | |
{ | |
TempVar = Array[Index]; | |
Array[Index] = Array[i]; | |
Array[i] = TempVar; | |
} | |
cout << i+1 << ": "; //각각 정렬 싸이클마다의 배열 상태 출력 | |
for (int k = 0; k < 5; k++) | |
cout << Array[k] << " "; | |
cout << endl; | |
} | |
} |
'알고리즘' 카테고리의 다른 글
퀵 정렬 (Quick Sort) (0) | 2017.06.06 |
---|---|
삽입정렬 (Insertion Sort) (0) | 2017.06.05 |
버블 정렬 (Bubble Sort) (0) | 2017.06.05 |