1. 알고리즘 설명
정렬 선택 : 예를 들어, 먼 길이 N 배열, 첫 번째 트립에서 트래버스 N 데이터에서 가장 작은 값을 찾아 첫 번째 요소와 교환하고, 두 번째 트립은 나머지 N-1 데이터를 가로 지르고, 두 번째 요소와 교환하고 두 번째 요소와 교환하고 나머지 두 값을 찾아 N-1th 요소와 교환하고 정렬이 완성됩니다.
다음 5 개의 변수되지 않은 데이터가 예로 사용됩니다.
56 12 80 91 20 (첫 번째 여행의 선택 과정은 기사에서만 개선됩니다)
첫 번째 여행 : 12 56 80 91 20
2 차 여행 : 12 20 80 91 56
여행 3 : 12 20 56 91 80
4 번째 여행 : 12 20 56 80 91
2. 알고리즘 분석
평균 시간 복잡성 : O (N2)
공간 복잡성 : O (1) (교환 및 레코드 인덱스 용)
안정성 : 불안정 (예를 들어, 첫 번째 [5] 및 [3]은 시퀀스의 첫 번째 여행에서 교환되어 [5, 5, 3]이어서 첫 번째 5가 두 번째 5를 뒤로 움직입니다).
3. 알고리즘 구현
public class selectionsort {public static void main (String [] args) {int len = 15; int [] ary = new int [len]; 랜덤 random = new random (); for (int j = 0; j <len; j ++) {ary [j] = random.nextint (1000); } system.out.println ( "-----------------"); // ary = new int [] {10,9,8,7,6,5,4,3,2,1}; // 테스트 교환 // ary = new int [] {1,2,3,4,5,6,7,8,10,9}; // (int j = 0; j <ary.length; j ++) {system.out.print (ary [j]+"") } selectDesc (ary); selectASC (ary); }/ * * 정렬을 선택하십시오 : 하강 */static void selectDesc (int [] ary) {int compareCount = 0; // 비교 시간 int changecount = 0; // 교환 수 int len = ary.length; int maxValueIndex = -1; // (int i = 0; i <len -1; i ++)에 대한 비교 후 최소값 인덱스를 기록하십시오. {maxValueIndex = i; // (int j = i+1; // 더 큰 인덱스 비교 ++를 기록합니다. }} // system.out.println ( "minValueIndex ==" + maxValueIndex); if (maxValueIndex! = i) {// 인덱스가 왼쪽의 레코드와 다른 경우 ary [i] = ary [maxValueIndex]+(ary [maxValueIndex] = ary [i]) * 0; // 1 단계 교환 changecount ++; }} System.out.println("/n------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ (int i = 0; i <len -1; i ++) {minindex = I; ary [minindex]+(ary [minindex] = ary [i]) * 0; System.out.println("/n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- compareCount + ", number of exchanges" + changeCount); for (int j = 0; j <ary.length; j ++) {system.out.print (ary [j]+""); }}}인쇄
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------