在java中,排序的时候,当我有相等的值时,排序的特定问题的解决方案是什么

In java, when sorting, what's the solution to a specific issue to sort when I have equal values

所以我这里有这个问题。我想编写非抢占式优先级调度算法的代码,我的方法是对其进行排序,因为你想按照算法所说的那样首先获得最高优先级。如果我在数组中有优先级值。示例:作业 1 = 2;工作2 = 5;工作 3 = 2;工作 4 = 4.

该算法是当存在两个或多个具有相同优先级的作业时,将处理器分配给一个"who arrived first"。从上面的例子来看应该是这样排序的(降序):job2 - job4 - job1 - job3.

由于 job1 和 job3 的优先级相同,我希望 job1 在 job3 之前。

现在我的问题是这个。排序先得到 job1 而不是 job3 的解决方案是什么?或者它是否已经在系统中,我可以自动解决这个问题。因为我以前从来没有尝试过 job3 是先还是后。

你说的是稳定排序,就是保持等值元素的顺序。归并排序是稳定的,而快速排序则不是。 Collections.sort 使用合并排序并且应该在 O(nlogn) 中完成这项工作。

然而,如果时间复杂度是一个问题,并且由于优先级的数量有限,基数排序应该排序,通常(虽然不能保证)在 O(sn) 中,当使用 n 个大小为 s 的整数键时。

稳定排序是你问题的答案,假设作业到达时存储在数组的前面。因此,如果输入作业 1 = 2,然后输入一些其他作业,然后作业 3 = 2,则数组将如下所示:[作业 1,作业 x,作业 y,...,作业 3]。稳定排序,顾名思义,如果数组中的两个元素具有相同的值,则保留这两个元素的原始排序。正如 myin528 所述,Mergesort 是稳定的,基数排序也是稳定的,这可能会更快,具体取决于数组的值,或者插入排序,如果你的数组很小。

Priority Queue Data Structure already exists in Java , you can use that. Thread safe version is - PriorityBlockingQueue

您可以定义自定义比较器以根据优先级对队列进行排序,同时在优先级相等时保持插入顺序。

这里有很多例子 - Java: How do I use a PriorityQueue?

列出了其他比较策略here

参考this一个

希望对您有所帮助!!