병합 정렬 알고리즘

패키지 com.ebiz.sort, 

가져 오기 java.util.Arrays; 

/ ** 
 * @author YHJ 
 * @Create 2019년 9월 3일 22시 21분 
 * / ** 
 * 종류 (재귀) 병합 
 * 
 상 순서 ① 당 *. O 두 숫자는, 플로어 (N / 2) 서열을 병합 동작 
 실행 *를 ②. ① 각 요소가 가질 때까지 
그룹간에 비교 ③ *.
* ④. 단계를 반복 , 모든 요소까지 소트한다.
* / 공용 클래스 병합 { 공공 정적 무효 메인 (문자열 []에 args) { INT [] ARR = {8,4,5,7,1,3,6,2,9 } mergingSort (ARR) } 공용 정적 INT [] mergingSort ( INT[] 도착) { 경우 (arr.length <= 1 ) { 복귀 도착; } INT NUM = arr.length >> 1 ; INT [] = leftArr Arrays.copyOfRange (도착, 0 , NUM); INT [] = rightArr Arrays.copyOfRange (도착, NUM, arr.length); 에서 System.out.println ( "두 어레이 분할"+ Arrays.toString (leftArr) + "및"+ Arrays.toString (rightArr을)); 반환 mergeTwoArray (mergingSort (leftArr), mergingSort (rightArr)); // 不断拆分为最小单元,再排序合并 } 전용 정적 INT [] mergeTwoArray ( INT[] arr1 중 값 int [] arr2은)는 { int로 I = 0, J = 0, K = 0 ; 값 int [] = 초래할 새로운 새 INT [arr1.length의 arr2.length +]; // 합병 후 별도의 저장 공간을 적용 배열 그동안 (I는 <arr1.length && J는 <arr2.length) { // 새로운 배열로 두 서열의 더 작은 값을 선택 IF (arr1 여기서 I는] <= {arr2은 [J] 일) [K 결과 ++ ] arr1의 = [I가 ++ ] } 사람이 { 결과 [K는 ++ = arr2은 [J ++ ]; } } 그동안 (I는 arr1.length를 <) { // 새로운 배열 요소 (1)의 초과 시퀀스 결과 [K ++] arr1의 = [I은 ++ ] } 그동안 (J <arr2.length) { // 새로운 배열로 시퀀스 추가 소자 (2) 결과 [K ++ = arr2은 [J ++ ] } 에서 System.out.println ( "부분 병합 : "+ Arrays.toString (결과))의, 반환 결과; } }

 

추천

출처www.cnblogs.com/jiushixihuandaqingtian/p/11463263.html