问题:给指定n个数排序(桶排序)
思路:
是将数分到有限数量的桶子里(桶可以用数组、队列、链表、栈来实现,根据不同的需求选取不同的结构来当作桶)。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶里面的在进行排序。
Code:
public class bucketSort {
public static void main(String[] args) {
Scanner as=new Scanner(System.in);
int n=as.nextInt(),i,max = 0,min = 0;
int[] a=new int[n];
for(i=0;i<n;i++) {
a[i]=as.nextInt();
if(i==0) {
max=a[i];
min=a[i];
}else {
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
}
int[] b=new int[max-min+1];
for(i=0;i<n;i++) {
b[a[i]-min]++;
}
for(i=0;i<b.length;i++) {
for(int j=0;j<b[i];j++)
System.out.print((i+min)+",");
}
}
}
解释:
- 设置一个定量的数组当作空桶;
- 遍历输入数据,并且把数据一个一个放到对应的桶里去;
- 对每个不是空的桶进行排序;
- 从不是空的桶里把排好序的数据拼接起来。
注:桶排序的桶可以根据需要选用数组、队列、栈或链表