자바는 달성하기 위해 알고리즘을 분류 기수

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 }

 

추천

출처www.cnblogs.com/BaoZiY/p/10929948.html