Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求N~N+;阵列中最大的100个元素?_Algorithm_Sorting - Fatal编程技术网

Algorithm 求N~N+;阵列中最大的100个元素?

Algorithm 求N~N+;阵列中最大的100个元素?,algorithm,sorting,Algorithm,Sorting,这是limitn,100SQL语句中的情况 当我只想获取N~N+100最大的元素时,对整个数组进行排序是一种浪费 对于这种情况,最好的算法是什么?查找std::partial_sort(C++)查找std::partial_sort(C++)在未排序的数组中,最好的STL实现是O(n),因为必须检查所有元素。遍历时,只需将当前前100个元素保留在内存中,如果遇到的元素大于当前100个元素中的最低元素,只需删除该元素并添加新元素。您可以将内存中的前100个元素作为已排序的队列保留。在未排序的数组中

这是
limitn,100
SQL语句中的情况

当我只想获取
N~N+100
最大的元素时,对整个数组进行排序是一种浪费


对于这种情况,最好的算法是什么?

查找
std::partial_sort
(C++)

查找
std::partial_sort
(C++)

在未排序的数组中,最好的STL实现是O(n),因为必须检查所有元素。遍历时,只需将当前前100个元素保留在内存中,如果遇到的元素大于当前100个元素中的最低元素,只需删除该元素并添加新元素。您可以将内存中的前100个元素作为已排序的队列保留。

在未排序的数组中,您所能期望的最好结果是O(n),因为必须检查所有元素。遍历时,只需将当前前100个元素保留在内存中,如果遇到的元素大于当前100个元素中的最低元素,只需删除该元素并添加新元素。您可以将内存中的前100个元素作为排序队列保留。

我想这取决于数组的大小

对于一个足够小的数组,就像在选择排序中一样,只需在数组中迭代100次,选择最大元素并移除它

如果数组较大,则可以调整快速排序算法,以便在每个步骤中,根据是否有足够的元素大于轴,对大于轴的元素进行排序


一旦存储桶变得足够小,快速排序算法可以切换到选择排序算法。

我想这取决于数组的大小

对于一个足够小的数组,就像在选择排序中一样,只需在数组中迭代100次,选择最大元素并移除它

如果数组较大,则可以调整快速排序算法,以便在每个步骤中,根据是否有足够的元素大于轴,对大于轴的元素进行排序


一旦存储桶变得足够小,快速排序算法可以切换到选择排序算法。

如何知道正确的枢轴?为了避免最坏的情况,枢轴通常被随机选择,或者作为存储桶的第一个、最后一个和中间元素的中间值。即使对于小数组也是如此(我假设这里有100多个元素),我看不出遍历数组100次有什么意义,因为一次就可以遍历。@LuchianGrigore:你说得对。你的方法比我的小数组的方法好。+1。不过,大数组应该使用自适应的快速排序来缩小。你如何知道正确的轴?为了避免最坏的情况,通常会选择轴它们可以是随机的,也可以是存储桶的第一个、最后一个和中间元素的中间值。即使是小数组(这里我假设超过100个元素),我看不出遍历数组100次有什么意义,只要一次就可以做到。@LuchianGrigore:你说得对。你的方法比我的小数组的方法好。+1。不过,大数组应该使用适应的快速排序来缩小。你有这个算法的名称吗?@new\u perl:这是插入排序,删除任何内容比
100
最大的元素更重要。我没有名字,但我相信这是一个最明显的算法工作正常的情况。正如丹尼斯指出的,这种技术类似于插入排序。你对这种算法有名字吗?@new\u perl:这是插入排序,除去
100
最大的元素之外的任何东西。我不知道我没有名字,但我相信这是一种最明显的算法可以正常工作的情况。正如Dennis指出的,这种技术类似于插入排序。这里有一个实现优先级队列的方法,与本例中的partial_sort()相同。这里有一个实现优先级队列的方法,与partial_sort()相同在这种情况下。我的坏,+1…所以它是部分排序:)我的坏,+1。。。所以这是部分排序:)