簡體   English   中英

具有最大值和最小值的桶排序

[英]Bucket Sort with a max and min value

對於分配,我必須創建一個方法,該方法在大小為 25 的數組上實現桶排序,該數組填充了 0 到 25(含)之間的隨機整數,並且我必須使用最大值作為該方法的參數。 Max 是數組中最大的元素(在我的代碼中是 25)。 然后我必須創建另一個在同一個數組上實現桶排序的方法,但現在它填充了 -25 和 25(含)之間的隨機整數,但在這個方法中我必須使用最大值和最小值,它們都傳入. 最大值相同但最小值是數組中的最小值(在我的代碼中為 -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;
    }
  }
}

您只需要創建存儲桶來保存從最小值到最大值的值。 例如,如果 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++;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM