알고리즘 시*련아

C++ 선택정렬 - 정렬1

100수 2022. 8. 2. 20:49

정렬중에서 가장 간단하고 직관적인 정렬이다

 

아이디어는

1. 배열중에서 가장 작은 숫자를 선택한다

2. 선택한 숫자와 가장 앞에있는 숫자를 교체한다

 

int* SelectionSort(int* arr, int size){
    int min, index = 0, temp;
    
    for(int i=0; i < size; i++){
        min = 10000;
        for(int j=i; j < size; j++){ //~i 까지 정렬이 되어있으므로 i에서 부터 시작
            if(arr[j] < min){	// 배열의 최소값을 찾는다
                min = arr[j];
                index = j;
            }
        }
        temp = arr[i];	//최솟값과 가장 앞의 값을 교체한다
        arr[i] = arr[index];
        arr[index] = temp;
    }

    return arr;
}

시간복잡도는 O(n * (n + 1) / 2) 이므로

O(n²)이다