算法导论-BucketSort桶排序Java实现

本文介绍了一种基于Java实现的桶排序算法。通过将待排序数组拆分成多个子桶,并使用快速排序对每个桶内的元素进行排序,最后合并所有桶来完成整个排序过程。文章提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


public class BucketSort {
 public static void main(String args[]){
  int[] data={
    50,49,48,47,46,45,44,43,42,41,
    40,39,38,37,36,35,34,33,32,31,
    30,29,28,27,26,25,24,23,22,21,
    20,19,18,17,16,15,14,13,12,11,
    10,9,8,7,6,5,4,3,2,1
    };
//  reverse(data);
  bucketSort(data);
  print(data);
  
 }
 private static void reverse(int[] data){
  int temp;
  for(int i=0;i<data.length/2-1;i++){
   temp=data[i];
   data[i]=data[data.length-1-i];
   data[data.length-1-i]=temp;
  }
 }
 private static void print(int[] data) {
  System.out.println("最终结果");
  for(int i=0;i<data.length;i++){
   if(i%10==0)System.out.println();
   System.out.print(data[i]+" ");
   if(data[i]<10)System.out.print(" ");
  }
  
 }
 public static void bucketSort(int[] A){
  Int[] B=new Int[6];//6个桶
  for(int i=0;i<A.length;i++){
   Int temp=new Int();
   temp.data=A[i];
   temp.next=null;
   if(B[A[i]/10]==null){
    B[A[i]/10]=temp;
   }
   else{
    temp.next=B[A[i]/10];
    B[A[i]/10]=temp;
   }
  }
  /*for(int i=0;i<B.length;i++){
   Int t=B[i];
   while(t!=null){
    System.out.print(t.data+" ");
    t=t.next;
   }
   System.out.println();
  }*/
  for(int i=0;i<B.length;i++){
   B[i]=quickSort(B[i]);
  }
  int count=0;
  for(int i=0;i<B.length;i++){
   Int temp=B[i]; 
   while(temp!=null){
    A[count]=temp.data;
//    A[count]=1;
    count++;
    temp=temp.next;
   }
  }
 }
 private static Int quickSort(Int int1) {
  int count=0;
  int[] temp=new int[1000];
  while(int1!=null){
   temp[count]=int1.data;
   count++;
   int1=int1.next;
  }
  
  int[] result=new int[count];
  for(int i=0;i<count;i++){
   result[i]=temp[i];
  }
  quick(result,0,result.length-1);
  int1=null;
  for(int i=0;i<result.length;i++){
   Int tem=new Int();
   tem.data=result[i];
   tem.next=null;
   if(i==0){
    int1=tem;
   }
   else{
    tem.next=int1;
    int1=tem;
   }
  }
  return int1;
 }
 private static void quick(int[] result, int p, int r) {
  int q;
  if(p<r){
   q=partion(result,p,r);
   quick(result,p,q-1);
   quick(result,q+1,r);
  }
 }
 private static int partion(int[] result, int p, int r) {
  int x=result[r];
  int i=p-1;
  int temp;
  for(int j=p;j<r;j++){
   if(result[j]>=x){
    i++;
    temp=result[j];
    result[j]=result[i];
    result[i]=temp;
   }
  }
  i++;
  temp=result[i];
  result[i]=result[r];
  result[r]=temp;
  return i;
 }
}
class Int{
 public int data;
 public Int next;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值