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));
}
}
桶排序
最新推荐文章于 2024-04-19 14:46:11 发布