java - 桶排序中的桶大小

标签 java algorithm sorting

我正在尝试为桶排序编写代码,但对每个桶的桶大小感到困惑。我的代码如下。 输入数组:{12, 11, 13, 5, 6, 7,10,22,4,16,1,26};

我正在传递每个桶的桶大小 >3 然后我没有按排序顺序获得输出。它为桶大小 1 和 2 提供了完美的答案

public void bucsort(int[] arr,int bucketSize){

        if(arr.length==0) return;

        int max=arr[0];
        int min=arr[0];

        for(int i=0; i<arr.length;i++){
            if(arr[i]<min)
            {
                min=arr[i];
            }
            else
                max=arr[i];
        }
        int bucketCount= (max - min) / bucketSize + 1;
         List<List<Integer>> buckets = new ArrayList<List<Integer>>(bucketCount);
        // int divider= (max+1)/bucketCount;

         for (int i = 0; i < bucketCount; i++) {
                buckets.add(new ArrayList<Integer>());
            }
         for (int i = 0; i < arr.length; i++) {

                buckets.get((arr[i]-min) / bucketSize).add(arr[i]);
            }
         int currentIndex = 0;
            for (int i = 0; i < buckets.size(); i++) {
                Integer[] bucketArray = new Integer[buckets.get(i).size()];
                bucketArray = buckets.get(i).toArray(bucketArray);
                InsertionSort(bucketArray);
                for (int j = 0; j < bucketArray.length; j++) {
                    arr[currentIndex++] = bucketArray[j];
                }
            }       
    }

没有什么关系。桶的数量及其大小?

我为 max-min 函数编辑了我的方法,还调试了程序。我的插入排序似乎有一些错误

代码是:

public void InsertionSort(Integer[] arr){


        for(int i=1; i<arr.length; i++){
            int value=arr[i];
            int hole=i;

            while(hole>0 && arr[hole-1]>value){

                arr[hole]=arr[hole-1];

                hole--;
            }

            arr[hole-1]=value;
        }
    }

主要功能

public static void main(String[] args) {

        int arr[] = {12, 11, 13, 5, 6, 7,10,22,4,16,1,26};

        BucketSort ob = new BucketSort();
        ob.bucsort(arr, 5);
        printArray(arr);
    }
    static void printArray(int arr[])
    {
        int n = arr.length;
        for (int i=0; i<n; ++i)
            System.out.print(arr[i] + " ");
        System.out.println();
    }

桶大小 5 的输出:5 1 4 6 7 10 12 11 13 16 22 26 对于尺寸 3:1 5 4 6 7 12 10 11 13 16 22 26 对于尺寸 2:1 4 5 6 7 10 12 11 13 16 22 26

最佳答案

寻找最大最小值是错误的...(你有一些逻辑错误)

int minValue = array[0];
        int maxValue = array[0];
        for (int i = 1; i < array.Length; i++) {
            if (array[i] < minValue) {
                minValue = array[i];
            } else if (array[i] > maxValue) {
                maxValue = array[i];
            }
        }

在您的代码上:

     1 4 3 
min  1 1 1
max  1 4 3

这才是正确的实现方式

for (i = 1; i < length; i++) {
            j = i;
            while (j > 0 && arr[j - 1] > arr[j]) {
                  tmp = arr[j];
                  arr[j] = arr[j - 1];
                  arr[j - 1] = tmp;
                  j--;
            }
}

有时间我会调试你的代码..

关于java - 桶排序中的桶大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41346727/

相关文章:

c++ - 如何确定图是否具有非唯一拓扑排序

java - 数据输入流和 UTF-8

java - 如何创建 Controller 中不处理的链接? Spring框架

java - 我可以在不切换到显式迭代器的情况下处理 for-each 循环中的异常吗?

algorithm - 代码的时间复杂度是多少?

c# - 如何自定义 DataTable 列的排序

java - 如何使用优先级(字符串)Android 对自定义列表进行排序

algorithm - 使用程序计数器(指令指针)值中的模式检测循环

algorithm - 如何有效地分割单元格中的二维空间,使每个单元格最多包含 K 个点?

java - 替换 JavaFX 中的列排序