我正在尝试了解快速排序的外部版本(当数据无法放入主内存时)。我在外部快速排序过程的Wiki上找到了以下链接和类似的解释:
定义:将 M/2 的第一个和最后一个元素读入缓冲区(缓冲区的作用类似于快速排序中的枢轴),并对它们进行排序。从头或尾读取下一个元素以平衡书写。如果下一个元素小于缓冲区的最小值,则将其写入开头的可用空间。如果大于最大,就写到最后。否则写入缓冲区的最大或最小,并将下一个元素放入缓冲区。保持写入最大的下键和最小的上键,以避免使用按顺序排列的中间元素。完成后,写入缓冲区。递归地对较小的分区进行排序,并循环对剩余的分区进行排序。
我有理解它的问题:
是
M
指主存的大小吗?我还有N-M
一些驱动器上的剩余元素?The buffer acts like the pivot in quicksort
- 这是否意味着我需要N-M
将驱动器中的剩余元素分成两部分a
,并且b
其中的元素a
低于缓冲区中的所有元素,而元素中的元素b
大于或等于缓冲区中的最大元素?Read the next element from the beginning or end to balance writing.
平衡写作是什么意思?应该从缓冲区(内存)还是从驱动器中读取下一个元素?Otherwise write the greatest or least of the buffer, and put the next element in the buffer
- 如果我将下一个元素放入缓冲区(已经排序),我需要再次对缓冲区进行排序吗?
一些它如何工作的例子或更好的解释将非常有用。