桶排序

package com.xjj.Ah;

import java.util.Random;
/*-----------桶排序-----------
 * 1.桶排序, 是最快最简单的排序。有多宽维度,就要申请多大的数组,
 * 2.桶排序的时间复杂度是O(M+N),是最快的排序,它也是最简单的排序。
 * 3.往桶里装数
 * 4.浪费了空间
 * 5.不能排小数
 * 
 * 6.去重
 * */

class Gap{
	//找出其排序表中连续两个要素的最大间距
	public int method(int[] num){
		int max = num[1]-num[0];
		for (int i = 1; i < num.length-1; i++) {
			max = Math.max(max, num[i+1] - num[i]);
		}
		return max;
	}
}
public class Bucket {
	public static int[] bucket(int[] num){
		
		if(num == null || num.length < 2){
	        return num;
	    }
		
		int t = 0, n = num.length;
		int[] bucket = new int[1001];
		
		//初始化桶,让其每个个数均为0
		for (int i = 0; i < bucket.length; i++) {
			bucket[i] = 0;
		}
		
		//获得原数组的数,让其对应桶(序列)的个数+1
		for (int i = 0; i < n; i++){
			int j = num[i];
			bucket[j]++;
			//bucket[j]=1;		去重
		}
		
		//让对应桶的个数>=1执行相应操作
		for (int i = 0; i < bucket.length; i++)
			for(int j = 1; j <= bucket[i]; j++){				
				num[t++] = i;
			}
		
		return num;
	}
	

	public static void main(String[] args) {
		//定义数组个数
		int N = 10;
		//int[] array = {6,1,2,7,9,3,4,5,10,8};
		int[] array = new int[N];
		Random rand = new Random();
		for(int i = 0; i < N; i++){
			array[i] = rand.nextInt(1001);
		}
		
		System.out.print("原数组为:  ");
		for (int i : array) {
			System.out.print(i + " ");
		}
		System.out.println();
		
		System.out.print("桶排序后为: ");
		
		array = bucket(array);  
		for (int i : array) {
			System.out.print(i + " ");
		}

		System.out.println();
		Gap gap = new Gap();
		System.out.println("最大间距为: " + gap.method(array));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值