1. 程式人生 > >【牛客網】直通bat-面試演算法精品課_第2章 排序 2.10 基數排序練習題(JAVA版)

【牛客網】直通bat-面試演算法精品課_第2章 排序 2.10 基數排序練習題(JAVA版)

對於一個int陣列,請編寫一個基數排序演算法,對陣列元素排序。

給定一個int陣列A及陣列的大小n,請返回排序後的陣列。保證元素均小於等於2000。

測試樣例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]

AC程式碼:

利用LinkedList實現棧的功能

import java.util.*;

public class RadixSort {
ArrayList<LinkedList<Integer>> arr = new ArrayList<LinkedList<Integer>>();
	public int[] radixSort(int[] A, int n) {
        // write code here      
        for(int i=0; i<10; i++) {
            arr.add(new LinkedList<Integer>());
        }
        
        for(int i=0; i<4; i++){
            int divisor = (int)Math.pow(10, i);
            distribute(A, n, divisor);
            aggregate(A, n);           
        }
        
        return A;
    }
	
	public void distribute(int[] A, int n, int divisor) {
		int index = 0;
		for (int j = 0; j < n; j++) {
			index = ((A[j] / divisor) % 10);
			arr.get(index).addFirst(A[j]);
		}     
	}
	
	public void aggregate(int[] A, int n) {
		int index = n-1;
		for (int i = 9; i >= 0 ; i--) {
			while (!arr.get(i).isEmpty()) {
				A[index--] = arr.get(i).removeFirst();
			}
		}
		
	}

}