算法之2--桶排序

桶排序

桶排序是时间为o(n)的算法,属于用空间换取时间的算法,总结其用途可以有以下几点

1.实现按规则的排序.

2.求数据之间最大的间距.

3.求数据之间间距最大的三个数.

4.求时间复杂度为o(n)的排序算法.

......等

-------------------------------------------------------------------------------------------------------------------------------------------------------

算法思路:

1.待更新...

-------------------------------------------------------------------------------------------------------------------------------------------------------

上代码:

存放桶数据的类:

public class tagSBucket {
  boolean isValid;
  int max;
  int min;
  
  void add(int n)
     {
	   if(n<min)
	   {
		   min=n;
	   }
	   if(n>max)
	   {
		   max=n;
	   }
     }
public boolean isValid() {
	return isValid;
}
public void setValid(boolean isValid) {
	this.isValid = isValid;
}
public int getMax() {
	return max;
}
public void setMax(int max) {
	this.max = max;
}
public int getMin() {
	return min;
}
public void setMin(int min) {
	this.min = min;
}
     
}
代码实现:

import java.util.ArrayList;

public class Buckstsort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] data = new int[] { 1, 14,31, 22, 66};
		Bucketsort(data, data.length);
	}

	private static void Bucketsort(int[] data, int len) {
		// TODO Auto-generated method stub

		// 创建对象,并初始有效性为false
		ArrayList<tagSBucket> arr = new ArrayList<tagSBucket>();
		for (int i = 0; i < len; i++) {
			tagSBucket temp = new tagSBucket();
			temp.setValid(false);
			arr.add(temp);
		}
		// 把数据分别放到对应的桶内
		// 首先找对应的桶,那么就需要数组的最大值和最小值
		int min = data[0];
		int max = data[0];
		for (int i = 1; i < len; i++) {
			if(data[i]>max)
			{
				max=data[i];
			}
			if(data[i]<min)
			{
				min=data[i];
			}
		}
		//初始化桶中max和min的值
				for(int k=0;k<len;k++)
				{
					//第几个桶
					int Bucket=(data[k]-min)*len/(max-min);
					System.out.println(k+"----"+Bucket);
					if(Bucket>=len)
					{
						Bucket=Bucket-1;
					}
				/*	System.out.println(Bucket*(max-min)/len);
					System.out.println(min+Bucket*(max-min)/len);
					System.out.println((min+Bucket*(max-min)/len));*/
					arr.get(Bucket).setMin(data[k]);
					arr.get(Bucket).setMax(data[k]);
				}
		
		//接下来就要放到对应的桶上
		for(int j=0;j<len;j++)
		{
			//第几个桶
			int Bucket=(data[j]-min)*len/(max-min);
			if(Bucket>=len)
			{
				Bucket=Bucket-1;
			}
			arr.get(Bucket).setValid(true);
			arr.get(Bucket).add(data[j]);			
		}
      //输出结果
		int b=0;
		int result=0;
		for(int a=0;a<len;a++)
		{
			if(arr.get(a).isValid())
			{
				int resultTemp=arr.get(a).getMin()-arr.get(b).getMax();
				if(resultTemp>result)
				{
					result=resultTemp;
				}
				b=a;
			}
			
		}
		System.out.println(result);
	}
}
输出结果:

0----0
1----1
2----2
3----1
4----5
35


猜你喜欢

转载自blog.csdn.net/zhangchun888/article/details/48759287
今日推荐