Algorithm 排序算法的比较

Algorithm 排序算法的比较,algorithm,sorting,Algorithm,Sorting,我们喜欢什么时候 a) 桶排序和b)基数排序 过度比较有点像 气泡排序 插入排序 选择排序 合并排序 快速排序 这听起来很像一个家庭作业问题,所以我不想说太多 冒泡排序是一种非常简单的排序算法,它遍历列表中的所有项目,并将其与其他所有项目进行比较。这会导致大量比较,因此速度非常慢 基数排序是基于数字的排序,但您可以用数字表示任何数据,它和bucket可以给出更快的结果 插入/选择/合并排序就是为了完成这些任务而设计的。例如,在合并到列表时,如果要求对两个列表进行预排序,则可以使用特殊排序快速合

我们喜欢什么时候

a) 桶排序和b)基数排序

过度比较有点像

  • 气泡排序
  • 插入排序
  • 选择排序
  • 合并排序
  • 快速排序

    • 这听起来很像一个家庭作业问题,所以我不想说太多

      冒泡排序是一种非常简单的排序算法,它遍历列表中的所有项目,并将其与其他所有项目进行比较。这会导致大量比较,因此速度非常慢

      基数排序是基于数字的排序,但您可以用数字表示任何数据,它和bucket可以给出更快的结果

      插入/选择/合并排序就是为了完成这些任务而设计的。例如,在合并到列表时,如果要求对两个列表进行预排序,则可以使用特殊排序快速合并它们,而不是将整个列表作为一个列表进行排序。如果您知道这两个列表都是有序的,那么您只需要跟踪您在每个列表中的位置(两个索引号),比较每个索引处的元素,并在获取其中一个项目并将其移动到新列表中时上移索引


      排序算法是一个巨大的计算领域,因为有许多不同的要求。我描述的合并很容易编码,但在排序时,使用的内存会翻倍。你也可以让它跑得更快。也许从两端开始,跟踪两个索引,制作两个半合并的LIT,一个从底部到中间,另一个从顶部到中间,然后将第二个附加到第一个。。。我不知道可能会更好。

      这听起来很像家庭作业问题,所以我不想说太多

      冒泡排序是一种非常简单的排序算法,它遍历列表中的所有项目,并将其与其他所有项目进行比较。这会导致大量比较,因此速度非常慢

      基数排序是基于数字的排序,但您可以用数字表示任何数据,它和bucket可以给出更快的结果

      插入/选择/合并排序就是为了完成这些任务而设计的。例如,在合并到列表时,如果要求对两个列表进行预排序,则可以使用特殊排序快速合并它们,而不是将整个列表作为一个列表进行排序。如果您知道这两个列表都是有序的,那么您只需要跟踪您在每个列表中的位置(两个索引号),比较每个索引处的元素,并在获取其中一个项目并将其移动到新列表中时上移索引

      排序算法是一个巨大的计算领域,因为有许多不同的要求。我描述的合并很容易编码,但在排序时,使用的内存会翻倍。你也可以让它跑得更快。也许从两端开始,跟踪两个索引,制作两个半合并的LIT,一个从底部到中间,另一个从顶部到中间,然后将第二个附加到第一个。。。我不知道可能会更好。

      数学家会说,大多数排序在O(n log(n))或O(n²)时间内运行,而RadixSort在O(n)时间内运行-

      桶排序是从最高到最低有效位数排序中基数排序的近亲。-

      优点:-

      • 基数和桶排序是稳定的,保留了现有的相等键顺序

      • 它们以线性时间工作,与大多数其他类型不同。换句话说,当需要对大量项目进行排序时,它们不会停滞不前。大多数排序在O(n logn)或O(n^2)时间内运行。

      • 每个项目的排序时间是恒定的,因为项目之间不进行比较。对于其他排序,每次排序的时间随着项目数的增加而增加

      • 当需要使用短键对大量记录进行排序时,基数排序特别有效。

          数学家会说,大多数排序在O(n log(n))或O(n²)时间内运行,而RadixSort在O(n)时间内运行-

          桶排序是从最高到最低有效位数排序中基数排序的近亲。-

          优点:-

          • 基数和桶排序是稳定的,保留了现有的相等键顺序

          • 它们以线性时间工作,与大多数其他类型不同。换句话说,当需要对大量项目进行排序时,它们不会停滞不前。大多数排序在O(n logn)或O(n^2)时间内运行。

          • 每个项目的排序时间是恒定的,因为项目之间不进行比较。对于其他排序,每次排序的时间随着项目数的增加而增加

          • 当需要使用短键对大量记录进行排序时,基数排序特别有效。


          基数排序是最好的,当你必须排序<强> > <强> >数字,通常是适合于32/64位int(如果更少,考虑计数排序)< /强>的自然数。这是因为它更快,可以进行

          k*N
          操作,其中
          k
          是一个常数(
          O(N)
          time)<对于32位整数,代码>k通常为2或4

          当您必须对较小的集合进行排序时,使用基数排序及其近亲是没有意义的。在这些情况下,优化的快速排序(读取:)会更快。此外,如果您要对自定义数据类型进行排序,基数排序甚至可能无法使用,因此您别无选择,只能使用比较排序


          如果您不确定哪个更快(有时很难确定),请运行测试。始终考虑输入已经排序、逆排序和随机顺序的情况。考虑每个算法的内存需求,并做出相应的选择。当你必须对<强>数字的<强>><强> >排序时,最好使用N/P>< PrxRead,通常是适合于32/64位int(如果更少,考虑计数排序)>的自然数。这是因为它更快,可以进行
          k*N
          操作,其中
          k
          是一个常数(