C# 如何在超大数组中优化找到5个最大元素
我有一个非常大的数组。我必须找到数组中最大的5个元素。实现这一点的最佳/最优算法是什么C# 如何在超大数组中优化找到5个最大元素,c#,arrays,algorithm,data-structures,C#,Arrays,Algorithm,Data Structures,我有一个非常大的数组。我必须找到数组中最大的5个元素。实现这一点的最佳/最优算法是什么 请注意,我不必进行排序,它是一个未排序的数组如果数组未排序,最有效的算法是遍历列表,并将最大的5个元素存储在排序列表中。当迭代中的当前元素大于最小元素(SortedList中的第一个元素)时,删除最小元素并将当前元素添加到列表中。如果数组未排序,它的复杂性将是O(n)最有效的算法是遍历列表并将最大的5个元素存储在排序列表中。当迭代中的当前元素大于最小元素(SortedList中的第一个元素)时,删除最小元素并
请注意,我不必进行排序,它是一个未排序的数组如果数组未排序,最有效的算法是遍历列表,并将最大的5个元素存储在
排序列表
中。当迭代中的当前元素大于最小元素(SortedList中的第一个元素)时,删除最小元素并将当前元素添加到列表中。如果数组未排序,它的复杂性将是O(n)
最有效的算法是遍历列表并将最大的5个元素存储在排序列表中。当迭代中的当前元素大于最小元素(SortedList中的第一个元素)时,删除最小元素并将当前元素添加到列表中。它的复杂性将是O(n)
使用一个大小为5的堆,如果元素大于最小的元素,则将其放在该堆上(并将其移除)。查看选择算法:@JonH选择算法是O(n)
,但具有复杂的代码和可怕的常数。如果您在一个未排序的n
数组中查找m
元素,并且n
比m
大得多,那么Nico建议的堆解决方案在实践中会快得多。使用大小为5的堆,如果元素比最小的元素大,则将它们放在该堆上(并删除该堆).查看选择算法:@JonH选择算法是O(n)
,但代码复杂,常数可怕。如果您在n
事物的未排序数组中查找m
元素,并且n
比m
大得多,那么Nico建议的堆解决方案在实践中会快得多。它的复杂性将是多少?O(n)复杂度当你在长度NIT数组中只经过一次时,复杂度将是O(n)
再次阅读选择算法它的大O(n)复杂度将是多少?O(n)复杂度当你在长度NIT数组中只经过一次时,复杂度将是O(n)
再次阅读有关选择算法的内容,它的大O(n)