首页 > 编程语言 > 详细

基点排序

时间:2015-06-18 02:17:00      阅读:207      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!