1 짧은 기수 정렬 알고리즘
약 기수 정렬 알고리즘은 여러 가지면에서 많은 정보를 얻을 수 있습니다. 또한 기수 정렬 순서를 분배 공통 비교기 순서에 대하여, (버킷 정렬) 버킷 정렬 알려진 모든 번호를 할당함으로써 완성된다 정렬이 기수 정렬 (기수 정렬) 마지막 원의 배열을 포함하고있는 위치에있을 과정.
기수 정렬 알고리즘 :
- 정렬 알고리즘은 비 비교 방법에서 구현
- 기수 정렬 알고리즘은 안정적인 정렬 알고리즘
- 시간 기수 정렬 알고리즘 복잡도 : 할당은 체인 (10) 그래서 9 0이되어, 예를 들어, R = 10의 O (n)을 r은 메일 링리스트의 수이고, O의 컬렉션 (R)을 필요 원래 시퀀스의 분류. 및 D, 즉 비트 수 (예를 들어, 최대 수는 1234 비트의 수는 4, 4 = D이다), 즉 - "누산 할당"횟수. 따라서, 시간 복잡도는 O (d *의 (N + R))는 것이다.
- 공간 기수 정렬 알고리즘의 복잡성 : 추가 보조 공간을 필요로 "달리고"작업에 대한 비트의 수에 대한 기본에, 프로세스를 정렬 기수, 우리는 필요 + r에 n 개의 임시 공간
2, 기수 정렬 알고리즘의 기본
기수 정렬 알고리즘은 모든 종류의에 대해, 그래서 우리는 정확한 데이터가 필요 주어진 그것의 모든 비트는 숫자 계산 :
1 // 이 함수 나 어떤 정수 k 번째 비트를 반환 2 공용 정적 INT getFigure ( int로 I, INT의 K) { . 3 INT [] = {1, 10, 100, 1000, 10000, 100000 } . (4) 창 (I / A [K - 1이다.]), 10 % ; 5. }
3, 생각 알고리즘 기수 정렬 알고리즘
- 세트 INT [각각의 저장 배열 요소 수를 계산하는 것은 동일한 번호
- 어레이에 액세스하는 데 사용되는 버킷으로 설정 INT [] 버킷 모든 터브의 개수 및 배열의 길이가 일치해야
- 어레이의 현재 요소 자릿수의 최대 수는 각 사이클은 동일한 동작이며, 환상이며
- 먼저, 본 경우에 각각의 배럴의 비트 수의 비교 데이터의 수의 현재 값과 비교 통계 루프를 사용할 필요가 배열 요소 당 비트의 수를 찾아
- 카운트 [I]가 수행되는 특정 정렬에 저장되기 때문에 카운트를 이용하여 I 같이, 데이터를 배치하기로 결정되면, 사이클 카운트의 실행 종료 후에 내가되는 비트 수의 모든 숫자의 배열 [I] 배럴의 가장 오른쪽 경계, i 번째의 위치는
- 청구 각각 버킷의 루프를 사용하여 어레이의 데이터는, 주목 전방에서 후방로드
- 데이터 버킷 모두 하나 꺼내어 한 재 할당, 언하기
- 마지막으로 최종 결과를 얻을 때까지, 루프 위의 절차를 반복합니다.
4, 자바 기수 정렬 알고리즘을 달성하기 위해
1 개 패키지 com.baozi.com.test.paixu; 2 세 수입 java.util.Arrays; 4 5 / ** 6 * @author의 바 오즈 7 * @create 2019-05-27-11 : 24 8 * / 9 공용 클래스 BitNumberSort { 10 공공 정적 무효 메인 (문자열 []에 args) { 11 // 定义整型数组 12 INT [] = nums 새로운 INT [{21, 56, 88, 195, 354, 1, 35, 12, 6, 7, 4567, 87, 980, 12345 }; 13 INT [] = nums1 새로운 INT[{1,23,345,21,432,324,4563,56789,6543,233 }; 14 BitNumberSort.lsd_RadixSort (nums1, 5 ); 15 에서 System.out.println (Arrays.toString (nums1)); 16 } 17 18 공공 정적 무효 lsd_RadixSort ( INT [] nums, INT의 최대) { 19 INT는 [] = 카운트 새로운 INT [10 ]; 20 INT [] = 버킷 새로운 INT [nums.length]; (21) 에 대한이 ( int로 1 = 1을, 난 ++] i가 최대 = < ) { 22 (23) 에 대한( INT에서 K = 0; K <count.length; ++ 케이 ) { 24 카운트는 [K] = 0 ; 25 } 26 27 대 ( INT에서 K = 0; K <nums.length k 번째 ++ ) { 28 카운트 [getFigure (nums [K], I)] ++ ; 29 } 30 31 대 ( INT에 K = 1; K <10; k는 ++ ) { 32 카운트 [K] = 카운트 [K] + 카운트 [K - 1 ]; 33 } 34 35 대 ( INT의 K = nums.length - 1; K> = 0; k--) { 36 INT의 인덱스 = getFigure (nums [K], I); 37 버킷 []의 인덱스를 계산 - 1] = nums [K]을; 38 카운트 [인덱스] - ; 39 } 40 대 ( INT K = 0, J = 0, K <nums.length; ++, J ++ 케이 ) { 41 nums [K] = 버킷 [J] 42 } 43 } 44 } 45 46 개인 정적 INT getFigure ( int로 I, INT의 J) { 47 INT[] A = 새로운 INT [{1, 10, 100, 1000, 10000, 100000 }; 48 창 (I / A [J - 1])의 10 % ; 49 } 50 }