基点排序

身份证号码都固定住,完全可以采纳基点排序的方式,

归纳下基点排序复杂度,首先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);
		}

	}

}

猜你喜欢

转载自cywhoyi.iteye.com/blog/2220369