정렬 개념을 선택하십시오
선택 분류는 또한 교환 분류 알고리즘으로, 버블 분류와 특정 유사성을 갖는다. 따라서 개인적으로 분류를 선택하는 것은 버블 분류를위한 개선 된 알고리즘으로 간주 될 수 있다고 생각합니다. 아이디어는 다음과 같습니다.
배열 ARR []가 정렬되었고 N 요소가 있다고 가정합니다.
1 첫 번째 요소 (Java에서 첨자, 첨자는 0)를 두 번째 요소와 비교하십시오. 전자가 후자보다 크면, 가장 작지 않아야하지만 우리는 버블 분류와 같은 교환을 서두르지 않습니다. 이 현재 가장 작은 요소의 위시를 저장하기 위해 임시 변수 A를 설정할 수 있습니다. 그런 다음 가장 작은 요소를 세 번째 요소와 계속 비교합니다. 여전히 가장 작지 않다면 a의 값을 수정합니다. 이런 식으로, 마지막 요소와의 비교가 완료 될 때까지 A는 가장 작은 요소의 첨자 여야합니다.
2. a의 값이 0이 아닌 경우 (초기 값, 즉 첫 번째 요소의 첨자) 두 요소를 위시 a 및 0으로 교환하십시오.
3. 위의 프로세스를 반복하고 가장 작은 요소가 첨자 0이있는 위치에 배치되었으므로 이번에는 첨자와 함께 요소와 비교를 시작하십시오.
4. 이런 식으로 마지막 요소 만 남을 때 까지이 요소가 가장 큰지 확인할 수 있습니다.
5. 정렬이 완료되었습니다.
분명히이 알고리즘에는 N-1 라운드의 분류가 필요합니다.
위의 설명은 매번 최소값을 찾는 방법 일뿐입니다. 실제로 매번 최대 값을 찾을 수 있지만 매번 배열의 꼬리에 넣어야합니다.
Java 구현 코드 :
selectArray.java
패키지 ch02; public class selectArray {// array private long [] arr; // 배열에서 유효한 데이터의 크기 개인 int elems; // 기본 생성자 public selectArray () {arr = New Long [50]; } public selectArray (int max) {arr = new long [max]; } // 데이터 삽입 데이터 공개 void insert (long value) {arr [elems] = value; Elems ++; } // display data data public void display () {for (int i = 0; i <elems; i ++) {system.out.print (arr [i]+""); } system.out.println (); } // 공개 void selectSort () {int min = 0; 긴 TMP = 0L; for (int i = 0; i <elems -1; i ++) {min = i; for (int j = i+1; }} tmp = arr [i]; arr [i] = arr [min]; arr [min] = tmp; }}}테스트 코드 :
패키지 ch02; public class testelectarray {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 (); }} 결과: