铲斗按最大值和最小值排序

时间:2016-04-23 21:09:11

标签: java sorting bucket-sort

对于赋值,我必须创建一个方法,在大小为25的数组上实现桶排序,该数组填充0到25(含)之间的随机整数,我必须使用最大值作为参数方法。 Max是数组中最大的元素(在我的代码中是25)。然后我必须创建另一个方法,在同一个数组上实现桶排序,但现在它填充了-25和25(含)之间的随机整数,但在这个方法中我必须使用最大值和最小值,它们都传入最大值是相同的,但min是数组中的最小值(在我的代码中是-25)。我完成了第一部分但是我无法弄清楚如何改变我的第一个方法来完成第二部分。这是我的第一个方法:

public static void sort( int[] arr, int max )
{
  int min = 0;
  int [] bucket=new int[max+1];
  for (int i=0; i< max; i++) {
    bucket[arr[i]]++;;
  }
  for (int i=0; i<bucket.length; i++) {
    for (int j=0; j<bucket[i]; j++) {
       arr[min++]=i;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

您只需要创建存储桶以保存从最小值到最大值的值。例如,如果min是-25且max是25,那么你必须创建51个桶。如果min为-4且max为25,那么你必须创建30个桶。因此,我会更改您的代码以生成存储桶以及填充存储桶的一些内部逻辑。以下是如何做到这一点:

public static void sort( int[] arr, int min, int max )
{
  int nBuckets = max - min + 1;
  int [] bucket=new int[nBuckets];
  for (int i=0; i< arr.length; i++) {
       bucket[arr[i] - min]++;

  }
  int index = 0;
  for (int i=0; i<bucket.length; i++) {
      for (int j =0; j<bucket[i]; j++) {
          arr[index++]=min;
      }
      min++;
  }
}