【发布时间】:2019-09-13 16:35:32
【问题描述】:
我正在尝试了解快速排序的外部版本(当数据无法放入主内存时)。我在外部快速排序过程的Wiki 上找到了following link 和类似的解释:
定义:将 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- 如果我将下一个元素放入缓冲区(已排序),我需要再次对缓冲区进行排序吗?
一些它是如何工作的例子或更好的解释将非常有用。
【问题讨论】:
标签: algorithm sorting quicksort external-sorting