最合适的排序算法

mih*_*the 1 sorting algorithm

我必须排序大量100000的双倍数量.

关键是我不想对整个数组进行排序,而只是按降序查找最大的20000个元素.

目前我正在使用选择排序.有什么方法可以改善性能?

rob*_*off 6

在大多数现代设备上,100,000不是一个非常大的阵列.您确定不能使用标准库排序功能对所有这些进行排序吗?

您可以通过使用heapsort的变体来避免完整排序.通常在堆中,您构建整个数据集的堆(在您的情况下为100,000个元素).相反,只允许堆增长到20,000个元素.将最大元素保留在堆顶部.堆已满(20,000个元素)后,将数据集的每个后续元素与堆顶部进行比较.如果下一个数据集元素大于堆的顶部,则跳过它.如果它小于堆的顶部,则弹出堆的顶部并从数据集中插入元素.

一旦完成了整个数据集,就会拥有数据集中20,000个最小元素的堆.您可以将它们逐个弹出到一个数组中,以获得一个已排序的数组.

此算法在O(N log K)时间内运行,其中N是数据集的大小(在您的示例中为100,000),K是您要保留的元素数(在您的示例中为20,000).