有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java减法排序

所以我在用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;
}

共 (1) 个答案

  1. # 1 楼答案

    因此,该算法似乎是可行的,但它在这个过程中做了很多不必要的工作

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

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

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