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

C++ 选择排序算法的标准是什么?,c++,data-structures,C++,Data Structures,我正在阅读排序方法,包括冒泡排序、选择排序、合并排序、堆排序、桶排序等。。它们还包含时间复杂性,这有助于我们了解哪种排序是有效的。所以我有一个基本的问题。如果我们包含数据,我们将如何选择排序。时间复杂度是帮助我们决定排序方法的参数之一。但我们是否有另一个参数来选择排序方法 只是为了更好的理解,想弄清楚分类 对堆排序进行一些查询: 我们在哪里使用堆排序 堆排序的更大优势是什么(除了时间复杂性O(n logn)) 堆排序的缺点是什么 堆的构建时间是多少?(我听到了O(n),但我不确定。) 任何必须使

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

只是为了更好的理解,想弄清楚分类

对堆排序进行一些查询:

  • 我们在哪里使用堆排序

  • 堆排序的更大优势是什么(除了时间复杂性O(n logn))

  • 堆排序的缺点是什么

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

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

  • 在对数据应用堆排序之前,我们将研究哪些参数


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

    通常,它让我们知道算法的性能如何随着数据集大小的增加而变化。需要考虑的事项:

    • 您希望对多少数据进行排序?这将帮助您了解是否需要寻找时间复杂度非常低的算法
    • 您的数据的排序方式如何?是否部分排序?随机排序?这可能会影响排序算法的时间复杂度。大多数算法都有最坏和最好的情况——您希望确保您没有在最坏情况的数据集上使用算法
    • 时间复杂度与运行时间不同。请记住,时间复杂度仅描述算法的性能如何随数据集大小的增加而变化。一个总是对所有输入进行一次传递的算法将是O(n)-它的性能与输入的大小线性相关。但是,总是在数据集上进行两次传递的算法也是O(n)-即使常数(和实际运行时间)不同,相关性仍然是线性的
    类似地,空间复杂性描述了一个算法需要运行多少空间。例如,简单排序(如)需要额外的固定空间来存储当前插入的元素的值。这是O(1)的辅助空间复杂性-它不随输入的大小而改变。但是,它在运行时会在内存中创建额外的数组,辅助空间复杂度为O(n)。这意味着它需要的额外空间量与输入的大小成线性关系

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

    有关更多信息,您可能会发现有用的



    要回答您的最新问题,您可能会发现上的wikipedia页面很有用 算法的复杂性:越复杂,需要进行的测试就越多,以确保其正确性。对于少量数据,冒泡排序或快速排序很容易编码和测试,与其他排序相比,对于您必须排序的数据量来说,这种排序可能是过度的

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

    数据本身:所有数据都几乎相同。对于某些排序,您可能会得到一个线性列表,因此,如果您对数据的组成有所了解,它可能有助于确定为工作选择哪种算法


    可用资源量:您是否有大量内存存储所有项目,或者是否需要将项目存储到磁盘。若内存中不能容纳所有内容,那个么合并排序可能是最好的,若处理内存中的所有内容,则其他排序可能会更好

    “如果我们包含数据”是什么意思?您是在问如何为特定的数据集选择排序方法吗?您还并没有接受前面问题的任何答案。这会让很多人不愿帮助你。你的问题是否可以更好地表达为选择排序算法的标准是什么?如果是的话,请编辑Q标题。你更新的问题看起来很像家庭作业,所以我给了你一个链接,可能对我的答案有帮助。如果是家庭作业,你能添加
    家庭作业
    标签吗?如果不是,你可能想把你的问题缩小一点。读得好: