当前位置: 首页 > 知识库问答 >
问题:

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

阴培
2023-03-14

所以我这里有这个问题。我想编码非抢占优先级调度算法,我的方法是对它进行排序,因为你想像算法所说的那样首先获得最高优先级。如果我在Array中有优先级值。例如:job1=2;job2=5;job3=2;job4=4。

算法是,当存在两个或多个具有同等优先级的作业时,将处理器分配给“最先到达”的作业。从上面的示例可以看出,它应该按以下方式排序(降序):job2-job4-job1-job3。

由于job1和job3具有相同的优先级,我希望job1在job3之前处于第一位。

现在我的问题是这个。排序首先得到job1而不是job3的解决方案是什么?或者是已经在系统中,我可能会自动解决这个问题。因为如果job3是第一个或最后一个,我以前从未尝试过任何东西。

共有3个答案

班承德
2023-03-14

稳定排序是您问题的答案,假设作业到达时存储在阵列的前后。因此,如果输入了作业1=2,然后输入了一些其他作业,然后输入了作业3=2,那么数组将如下所示:[作业1,作业x,作业y,…,作业3]。根据定义,稳定排序意味着如果数组中的两个元素具有相同的值,则保留这两个元素的原始排序。正如myin528所述,Mergesort是稳定的,基数排序也是稳定的,根据数组的值,基数排序可能更快,如果数组较小,插入排序也可能更快。

司毅庵
2023-03-14

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

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

暴英达
2023-03-14

Java中已经存在优先级队列数据结构,您可以使用它。线程安全版本为-PriorityBlockingQueue

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

这里有很多例子-Java:如何使用PriorityQueue?

此处列出的其他比较策略

这个也参考一下

希望有帮助!!

 类似资料:
  • 我想在cassandra 1.2 CQL 3.0上实现一个实时的内容排名系统 示例:根据用户投票提供新闻的前10条评论 用户可以评论新闻 用户可以对每条评论投票+1或-1 “真实例子youtube评论” 我的解决方案是: 在计数器表(content_counter)上存储投票计数器 创建排名表 null 选择core FROM content_counter where content_id='x

  • 问题内容: 什么是自然排序。假设我有一个Employee对象,其名称,年龄和加入日期按什么是自然顺序排序? 问题答案: 自然排序是一种字母数字种类,对人类而言似乎是自然的。 在经典的字母数字排序中,我们将具有以下内容: 1 10 11 12 2 20 21 3 4 5 6 7 如果您使用自然排序,则将为: 根据语言的不同,自然排序有时会忽略大写字母并加重字母(即,所有重音字母都被视为非重音字母)。

  • 本文向大家介绍解决TreeSet类的排序问题,包括了解决TreeSet类的排序问题的使用技巧和注意事项,需要的朋友参考一下 TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。 1、自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提:两个对象的类型

  • 问题:合并两个排序链表,并将其作为一个新的排序列表返回。新列表应该通过将前两个列表的节点拼接在一起来制作。 示例:输入:1- 我的解决方案: 我的输出只有1-

  • 我在计算机课上遇到了合并排序的问题。我不断收到错误或返回原始ArrayList。 我相信合并排序涉及到将数组(列表)递归地对半拆分,直到只剩下一个元素,然后从这些单独的元素开始,按排序顺序合并它们。直到数组(列表)被排序为止。至于实际的排序部分,我试图在新的ArrayList中插入两半之间的较高值,直到它们都为空,在这种情况下,填充的ArrayList现在被排序。 这是我当前的代码: 我将感谢任何

  • 下面是问题的链接:SPOJ-ACTIV 我想出了这个问题的重现如下: 其中next()查找具有开始时间的活动的索引 这是我的java解决方案,虽然它通过了SPOJ工具包的许多测试用例,但是它确实为一些提供了WA。我的概念/解决方案有什么问题?