选择排序算法的标准是什么

What are the criteria for choosing a sorting algorithm?

本文关键字:标准 是什么 算法 排序 选择      更新时间:2023-10-16

我正在阅读排序方法,包括冒泡排序、选择排序、合并排序、堆排序、桶排序等。它们还包含时间复杂性,有助于我们知道哪种排序是有效的。所以我有一个基本的问题。如果我们包含的数据比我们将如何选择排序。时间复杂度是决定排序方法的参数之一。但是,我们有其他参数来选择排序方法吗?。

只是想弄清楚如何进行分类,以便更好地理解。

有一些关于堆排序的查询:

  1. 我们在哪里使用堆排序?

  2. 堆排序的更大优势是什么(除了时间复杂性O(nlogn))?

  3. 堆排序的缺点是什么?

  4. 堆的构建时间是多少?(我听到O(n),但我不确定。)

  5. 任何我们必须使用堆排序或堆排序的场景都是更好的选择(优先级队列除外)?

  6. 在对数据应用堆排序之前,我们将查看数据的参数是什么?

排序算法的两个主要理论特征是时间复杂性和空间复杂性。

一般来说,时间复杂性让我们知道算法的性能是如何随着数据集大小的增加而变化的。需要考虑的事项:

  • 您希望对多少数据进行排序这将帮助您了解是否需要寻找时间复杂度非常低的算法
  • 您的数据将如何排序它会被部分排序吗?随机排序?这会影响排序算法的时间复杂性。大多数算法都有最坏和最好的情况——你要确保你没有在最坏的数据集上使用算法
  • 时间复杂性与运行时间不同请记住,时间复杂性仅描述算法的性能如何随着数据集大小的增加而变化。一个总是对所有输入进行一次遍历的算法将是O(n)——它的性能与输入的大小线性相关。但是,总是对数据集进行两次遍历的算法也是O(n)——即使常数(和实际运行时间)不同,相关性仍然是线性的

类似地,空间复杂性描述了一个算法需要运行多少空间。例如,插入排序等简单排序需要额外的固定空间来存储当前插入的元素的值。这是O(1)的辅助空间复杂度,它不随输入的大小而变化。然而,合并排序在运行时会在内存中创建额外的数组,辅助空间复杂度为O(n)。这意味着它所需要的额外空间量与输入的大小线性相关。

当然,算法设计往往是时间和空间之间的权衡——空间复杂度低的算法可能需要更多的时间,而时间复杂度较低的算法则可能需要更多空间。

有关更多信息,您可能会发现本教程非常有用。


要回答您更新的问题,您可能会发现堆排序上的维基百科页面很有用。

如果你指的是选择哪种类型排序的标准,这里还有一些其他需要考虑的项目。

你拥有的数据量:你有十个、一百个、一千个或数百万个项目要排序。

算法的复杂性:越复杂,就需要进行越多的测试来确保它是正确的。对于少量数据,冒泡排序或快速排序很容易编码和测试,而其他排序可能会对您必须排序的数据量造成过度伤害。

排序需要多少时间:如果你有一个大的集合,冒泡/快速排序将需要很多时间,但如果你有很多时间,这可能不是问题。然而,使用更复杂的算法将减少排序时间,但代价是在编码和测试方面付出更多努力,如果排序时间从长(小时/天)变为短,这可能是值得的。

数据本身:是否所有数据都接近相同。对于某些排序,你可能会得到一个线性列表,所以如果你对数据的组成有所了解,这可能有助于确定要选择哪种算法。

可用资源量:是否有足够的内存来存储所有项目,或者是否需要将项目存储到磁盘。如果所有东西都不能放在内存中,合并排序可能是最好的,而如果你处理内存中的所有东西,其他排序可能会更好。