简体   繁体   English

如何按降序对bucketsort进行排序

[英]How to sort a bucketsort in descending order

please help me, I really cant figure it out.I just found this code on the internet about bucket sort and was wondering if it could be sorted in descending order?请帮帮我,我真的想不通。我刚刚在互联网上找到了这个关于桶排序的代码,想知道它是否可以按降序排序? I tried using reverse() but it doesnt seem to work it still comes out as ascending order.我尝试使用 reverse() 但它似乎不起作用它仍然以升序出现。

    import java.util.*;
public class BucketSort {
  public static void main(String[] args) {
    int[] intArr = {47, 85, 10, 45, 16, 34, 67, 80, 34, 4, 0, 99};
    //int[] intArr = {21,11,33,70,5,25,65,55};
    System.out.println("Original array- " + Arrays.toString(intArr));
    bucketSort(intArr, 10);

    System.out.println("Sorted array after bucket sort- " + Arrays.toString(intArr));
  }
    
  private static void bucketSort(int[] intArr, int noOfBuckets){
    // Create bucket array
    List<Integer>[] buckets = new List[noOfBuckets];
    // Associate a list with each index 
    // in the bucket array         
    for(int i = 0; i < noOfBuckets; i++){
      buckets[i] = new LinkedList<>();
    }
    // Assign numbers from array to the proper bucket
    // by using hashing function
    for(int num : intArr){
      //System.out.println("hash- " + hash(num));
      buckets[hash(num)].add(num);
    }
    // sort buckets
    for(List<Integer> bucket : buckets){
      Collections.sort(bucket);
    }
    
    int i = 0;
    // Merge buckets to get sorted array
    for(List<Integer> bucket : buckets){
      for(int num : bucket){
          intArr[i++] = num;
      }
    }
  }
    
  // A very simple hash function
  private static int hash(int num){
    return num/10;
  }
} 

Since you didn't pass the comparator while sorting the Collection, so the sorting is performed in ascending order by default.由于您在对 Collection 进行排序时没有传递比较器,因此默认情况下按升序进行排序。

import java.util.*;

public class BucketSort {
    public static void main(String[] args) {
        int[] intArr = { 47, 85, 10, 45, 16, 34, 67, 80, 34, 4, 0, 99 };
        // int[] intArr = {21,11,33,70,5,25,65,55};
        System.out.println("Original array- " + Arrays.toString(intArr));
        bucketSort(intArr, 10);

        System.out.println("Sorted array after bucket sort- " + Arrays.toString(intArr));
    }

    private static void bucketSort(int[] intArr, int noOfBuckets) {
        // Create bucket array
        List<Integer>[] buckets = new List[noOfBuckets];
        // Associate a list with each index
        // in the bucket array
        for (int i = 0; i < noOfBuckets; i++) {
            buckets[i] = new LinkedList<>();
        }
        // Assign numbers from array to the proper bucket
        // by using hashing function
        for (int num : intArr) {
            // System.out.println("hash- " + hash(num));
            buckets[hash(num)].add(num);
        }
        // sort buckets
        for (List<Integer> bucket : buckets) {
            Collections.sort(bucket, Collections.reverseOrder());
        }

        int i = 0;
        // Merge buckets to get sorted array
        
        for(int j = buckets.length - 1; j >= 0; j--){
            for (int num : buckets[j]) {
                intArr[i++] = num;
            }
        }
    }

    // A very simple hash function
    private static int hash(int num) {
        return num / 10;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM