按减法排序

时间:2016-09-14 23:40:11

标签: java sorting

所以我在java中正在研究这种排序算法,并且想知道是否有人之前已经看过这样的事情。具体来说,该算法用于对具有非常小的数字范围的非常大的列表进行排序。如果你已经看到或有任何建议来增强算法,你能在下面说些什么吗?我在这里有代码:

public static int[] sort(int[] nums)
{   
    int lowest = Integer.MAX_VALUE;

    for (int n : nums)
    {
        if (n < lowest)
            lowest = n;
    }

    int index = 0;

    int down = 0;

    while (index < nums.length)
    {
        for (int i = index; i < nums.length; i++)
        {
            if (nums[i] == lowest)
            {
                int temp = nums[i] + down;
                nums[i] = nums[index];
                nums[index] = temp;

                index++;
            }
            else 
                nums[i]--;
        }
        down++;
    }

    return nums;
}

2 个答案:

答案 0 :(得分:1)

如果我没弄错的话,那就是你的标准问题BubbleSort。它实现起来很简单,但性能很差:O(n ^ 2)。注意两个嵌套循环:随着数组大小的增加,算法的运行时间将呈指数级增长。

它被命名为冒泡排序,因为最小的值会&#34;冒泡&#34;到阵列的前面,一次一个。您可以阅读更多相关信息on Wikipedia

答案 1 :(得分:0)

因此算法似乎有效,但它在这个过程中做了很多不必要的工作。

基本上你需要在添加x之前减去x次数并尝试交换它,其中x是数组中数字和最小数字之间的差值。以[99,1]为例。使用您的算法,您将在第一个for循环迭代中将数组更新为[98,1],然后接下来您将进行交换[1,98],然后您必须再进行97次迭代以使您的down变量达到98并将您的数组设置为[1,1]状态,然后向其添加98并将其与自身交换。它确实是一种有趣的技术,但效率不高。

任何给定作业的最佳算法实际上取决于您对数据的了解。查看其他排序算法,以了解他们做什么以及他们为什么这样做。确保您完成所做的算法,并尝试摆脱不必要的步骤。

为了首先增强算法,我将摆脱找到集合中的最低值并删除加法和减法步骤。如果您知道您的数字在给定范围内都是整数,请查看存储桶排序,否则您可以尝试合并或快速排序算法。