선택 정렬 개념
선택 정렬도 교환 정렬 알고리즘이고 버블 정렬과 어느 정도 유사성을 가지고 있으므로 개인적으로 선택 정렬은 버블 정렬의 개선된 알고리즘이라고 볼 수 있다고 생각합니다. 아이디어는 다음과 같습니다.
이제 n개의 요소가 있는 arr[] 배열을 정렬한다고 가정합니다.
1 첫 번째 요소(Java에서는 아래 첨자가 0임)와 두 번째 요소를 비교합니다. 전자가 후자보다 크면 가장 작아서는 안 되지만 버블 정렬 교환만큼 불안하지는 않습니다. 현재 가장 작은 요소의 첨자를 저장하기 위해 임시 변수 a를 설정할 수 있습니다. 그런 다음 현재 가장 작은 요소를 세 번째 요소와 계속 비교합니다. 그래도 여전히 가장 작은 요소가 아닌 경우 a의 값을 수정합니다. 이런 방식으로 마지막 요소와의 비교가 완료될 때까지 a는 가장 작은 요소의 첨자를 저장한다는 것을 확인할 수 있습니다.
2. a의 값이 0(초기값, 즉 첫 번째 요소의 첨자)이 아닌 경우 두 요소를 첨자 a와 0으로 교환합니다.
3. 이번에는 아래 첨자가 1인 요소부터 시작하여 위 과정을 반복합니다. 왜냐하면 가장 작은 요소가 이미 아래 첨자 0이 있는 위치에 배치되어 있기 때문입니다.
4. 마지막 요소만 남을 때까지 이 작업을 수행하면 이 요소가 가장 큰 것을 확인할 수 있습니다.
5. 정렬이 완료되었습니다.
분명히 이 알고리즘에는 n-1 라운드의 정렬도 필요합니다.
위의 내용은 매번 최소값을 구하는 방법일 뿐이라는 점에 유의해야 합니다. 사실, 매번 최대값을 찾을 수도 있지만, 그럴 때마다 배열의 끝에 넣어야 합니다.
Java 구현 코드:
SelectArray.java
package ch02; public class SelectArray { // 数组 private long[] arr; // 数组中有效数据的大小 private int elems; // 默认构造函数 public SelectArray() { arr = new long[50]; } public SelectArray(int max) { arr = new long[max]; } // 插入数据 public void insert(long value) { arr[elems] = value; elems++; } // 显示数据 public void display() { for (int i = 0; i < elems; i++) { System.out.print(arr[i] + " "); } System.out.println(); } // 选择排序 public void selectSort(){ int min = 0; long tmp = 0L; for(int i = 0; i < elems -1; i++){ min = i; for(int j = i + 1; j < elems; j++) { if(arr[j] < arr[min]) { min = j; } } tmp = arr[i]; arr[i] = arr[min]; arr[min] = tmp; } } }
테스트 코드:
package ch02; public class TestSelectArray { public static void main(String[] args) { SelectArray sArr = new SelectArray(); sArr.insert(89); sArr.insert(54); sArr.insert(667); sArr.insert(7); sArr.insert(12); sArr.insert(43); sArr.insert(12); sArr.display(); sArr.selectSort(); sArr.display(); } }
결과:
선택 정렬 알고리즘 예제 튜토리얼의 Java 구현에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!