ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.