[Data Structure] 선택 정렬 - Selection Sort
2022. 1. 3. 18:33ㆍMajor`/자료구조
선택 정렬 (Selection Sort)

Unstable Sort
시간복잡도
- O(n2)
장점
- 알고리즘이 단순하다
- 실제로 교환하는 횟수가 적기 때문에 많은 교환이 일어나는 자료상태에서 Bubble Sort보다는 효율적이다
- 추가 메모리가 필요없다
단점
- 불안정 정렬(Unstable Sort)이다
- 시간복잡도가 최선/평균/최악 전부 O(n²)으로, 굉장히 비효율적이다
과정
- 주어진 배열 중 최솟값 찾기
- 해당 값을 맨앞으로 옮기기
- 나머지 요소들도 똑같이 반복
▶ Selection Sort Code
static void selection_sort(int [] A){ for(int i=0; i<A.length-1; i++){ int min = i; for(int j=i+1; j<A.length; j++){ if(A[j] < A[min]) min = j; } int tmp = A[min]; A[min] = A[i]; A[i] = tmp; } }
▶ Full Code
package Sort; public class Selection_Sort_11 { public static void main(String[] args) { int [] A = new int[30]; // 정렬할 배열 A for(int i=0; i<A.length; i++) A[i] = (int)(Math.random()*201); // 0~200 // 정렬 전 A 출력 System.out.print("A []"); for(int i=0; i<A.length; i++){ if(i%10==0) System.out.println(); System.out.print(A[i] + "\t"); } System.out.println("\n"); selection_sort(A); // 정렬 후 A 출력 System.out.print("result []"); for(int i=0; i<A.length; i++){ if(i%10==0) System.out.println(); System.out.print(A[i] + "\t"); } System.out.println("\n"); } static void selection_sort(int [] A){ for(int i=0; i<A.length-1; i++){ int min = i; for(int j=i+1; j<A.length; j++){ if(A[j] < A[min]) min = j; } int tmp = A[min]; A[min] = A[i]; A[i] = tmp; } } }
