-
2. 선택 정렬(Selection Sort)Algorithm 2019. 10. 4. 00:56
#정렬알고리즘 분류
*Stable
: 정렬할 자료들 중 동일한 두 자료의 상대적인 위치가 정렬 후에도 유지되는 정렬 알고리즘
*In-place
: 정렬할 자료를 저장하는 메모리 공간 이외에 추가로 사용하는 메모리 공간이 O(1)인 정렬 알고리즘
#선택 정렬 알고리즘
각 루프마다
1. 최대(최소) 원소를 찾는다.
2. 최대(최소) 원소와 마지막(가장 앞에 있는) 원소를 교환한다.
3. 마지막(가장 앞에 있는) 원소를 제외한다.
하나의 원소만 남을 때까지 위의 루프를 반복한다.
ex)
5 2 4 1 3 3 2 4 1 5 3 2 1 4 5 1 2 3 4 5 1 2 3 4 5 #구현
#include <iostream> using namespace std; void selectionsort(int* a, int n); void swap(int* a, int* b); int main(){ int n; cin>>n; int* a = new int[n]; for(int i=0; i<n; i++) cin>>a[i]; seletcionsort(a, n); for(int i=0; i<n; i++) cout<<a[i]<<" "; return 0; } void selectionsort(int* a, int n){ for(int i=n-1; i>0; i--){ int maxIndex=0; for(int j=1; j<i; j++) if(a[maxIndex] < a[j]) maxIndex=j; swap(a[maxIndex],a[i]); } } void swap(int* a, int* b){ int tmp = *a; *a = *b; *b = tmp; }
//방법2 void seletionsort(int* a, int n){ while(n>0){ int maxIndex=0; for(int i=1; i<n; i++){ if(a[maxIndex]<a[i]) maxIndex=i; swap(a[maxIndex], a[n-1]); n--; } }
#시간복잡도 분석
원소 비교횟수 = n-1 + n-2 + n-3 + ... + 3 + 2 + 1 = n(n-1)/2
=> O(n*n)
'Algorithm' 카테고리의 다른 글
6. 분할과 정복_퀵정렬(Quick Sort) (0) 2019.10.04 5. 분할과 정복_병합정렬(Merge Sort) (0) 2019.10.04 4. 삽입 정렬(Insertion Sort) (0) 2019.10.04 3. 버블 정렬(Bubble Sort) (0) 2019.10.04 1. 알고리즘 개요 (0) 2019.10.03