身份证号码都固定住,完全可以采纳基点排序的方式,
归纳下基点排序复杂度,首先O(n+d),它没办法如同其他快排、冒泡等在不开辟额外空间的情况下进行自我排序,但是也没有归并排序等开辟如此大空间度。
适应的应用场景比较具有局限性,恰巧在公司的一组固定长度的排序过程中,有很好的解决方式。
主要用是通过bucket的概念,把数组迁移后,进行重排的过程,我的代码比较不够严谨,主要是能够帮我理清思路,
假设有?"672", "181", "363", "720"?
第一次
bucket[0]:720 bucket[1]:181 bucket[2]:672 bucket[3]:363
?结果:720、181、672、363
第二次
bucket[2]:720 bucket[6]:363 bucket[7]:672 bucket[8]:181
?结果:720、363、672、181
第三次
bucket[1]:181 bucket[3]:363 bucket[6]:672 bucket[7]:720
?最终结果:181、363、672、720
package com.butterfly.nioserver;
/**
 * 
 * @author young
 *
 */
public class Sort {
	public static void main(String[] args) {
		String[] arr = { "672", "181", "363", "720" };
		int leng = 3;
		int count = 0;
		while ((leng - count) > 0) {
			String[] buckets = new String[10];
			for (int val = 0; val < arr.length; val++) {
				// 余数
				int remainder = Integer.valueOf(arr[val].substring(leng - count
						- 1, leng - count));
				buckets[remainder] = arr[val];
			}
			int j = 0;
			for (int b = 0; b < buckets.length; b++) {
				if (buckets[b] != null) {
					arr[j] = buckets[b];
					j++;
				}
			}
			count++;
		}
		for (String string : arr) {
			System.out.println(string);
		}
	}
}
?
?
?
原文:http://cywhoyi.iteye.com/blog/2220369