public static void sortNumberMSD(int[] numbers, int numCount, int longestBit) {
		if(longestBit<=0) {
			return;
		}
		
		int bucketNum = 10;
		int[][] bucket = new int[bucketNum][numbers.length];
		int[] bucketCount = new int[bucketNum];
		
		for(int i=0;i<numCount;i++) {
			int lsd = numbers[i]/(int)Math.pow(10, longestBit-1);
			lsd = lsd%10;
			bucket[lsd][bucketCount[lsd]] = numbers[i];
			bucketCount[lsd]++;
		}
		
		for(int i=0;i<bucket.length;i++) {
			if(bucketCount[i]>1) {
				sortNumberMSD(bucket[i], bucketCount[i], longestBit-1);
			}
		}
		
		int k = 0;
		for(int i=0; i<bucketNum; i++) {
			if(bucketCount[i] != 0)
				for (int j=0; j<bucketCount[i]; j++) {
					numbers[k] = bucket[i][j];
					k++;
				}
			bucketCount[i] = 0;
		}
	}