Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对于快速稳定的指针数组,哪种算法是合适的?_Algorithm_Delphi_Sorting - Fatal编程技术网

Algorithm 对于快速稳定的指针数组,哪种算法是合适的?

Algorithm 对于快速稳定的指针数组,哪种算法是合适的?,algorithm,delphi,sorting,Algorithm,Delphi,Sorting,我有下面的数据结构,我想对它进行快速(明显)和稳定的排序。你认为哪种算法合适 type PSuperListItem = ^TSuperListItem; TSuperListItem = record SubItems : array of String; Marked : Boolean; ImageList : Byte; ImageIndex: Integer; Data : Pointer; end; TSup

我有下面的数据结构,我想对它进行快速(明显)和稳定的排序。你认为哪种算法合适

type
  PSuperListItem = ^TSuperListItem;
  TSuperListItem = record
    SubItems  : array of String;
    Marked    : Boolean;
    ImageList : Byte;
    ImageIndex: Integer;
    Data      : Pointer;
  end;

  TSuperListItems = array of PSuperListItem;

var
  Items: TSuperListItems; 
我发现只有插入、冒泡和合并排序算法是稳定的。我知道合并排序用于对链表进行排序。对于其他两种算法,我一无所知,但我有一种奇怪的感觉,它们速度较慢。所以我不知道该用哪种算法

我知道合并排序用于对链接列表进行排序

这不是真的。Mergesort适用于链表和数组

是的,Mergesort比Bubble和Insertion排序更快,它的复杂度为O(NlogN),而上述排序的复杂度为O(N^2)(但需要额外的内存)。所有这些信息

阵列的大小是多少?复杂性问题真的很重要吗

我知道合并排序用于对链接列表进行排序

这不是真的。Mergesort适用于链表和数组

是的,Mergesort比Bubble和Insertion排序更快,它的复杂度为O(NlogN),而上述排序的复杂度为O(N^2)(但需要额外的内存)。所有这些信息


阵列的大小是多少?复杂性问题真的很重要吗?

简单的回答是,使用mergesort。Mergesort不仅仅适用于链接列表。它也可以用于对数组进行排序,但是需要分配O(n)个额外内存来保存子数组


不要使用冒泡排序或插入排序,它们是O(n^2)运行时间。如果您不想使用O(n)额外内存,那么您将不得不实现更复杂的东西。有一些稳定版本的快速排序不需要太多额外内存,但它们很复杂。还有一些就地版本的mergesort不需要太多额外内存,但它们也更复杂。

简而言之,使用mergesort。Mergesort不仅仅适用于链接列表。它也可以用于排序数组,但您需要分配O(n)额外内存来保存子数组


不要使用冒泡排序或插入排序,它们是O(n^2)运行时间。如果您不想使用O(n)额外内存,那么您将不得不实现更复杂的东西。有一些稳定版本的快速排序不需要太多额外内存,但它们很复杂。还有一些mergesort的就地版本不使用太多额外内存,但它们也更复杂。

我在这里为Delphi实现了一个合并排序算法:


它包括一个DUnit测试项目。关于性能,实际上它并不比Delphi的TList标准快速排序算法慢。在某些情况下,它可以更快,我的测试表明了这一点。

我在这里为Delphi实现了一个合并排序算法:



它包括一个DUnit测试项目。关于性能,实际上它并不比Delphi的TList标准快速排序算法慢。在某些情况下,它可以更快,我的测试表明了这一点。

您希望它们如何排序。我会选择快速排序。@JensBorrisholt快速排序不稳定。合并排序:。非常感谢你,LU RD!那个合并排序算法工作得很好。它比QuickSort更稳定,速度更快,在1000000个列表项中占26%。FWIW,有各种稳定的排序算法。但我认为合并排序是其中最快的。您希望它们如何排序。我会选择快速排序。@JensBorrisholt快速排序不稳定。合并排序:。非常感谢你,LU RD!那个合并排序算法工作得很好。它比QuickSort更稳定,速度更快,在1000000个列表项中占26%。FWIW,有各种稳定的排序算法。但我认为合并排序是其中最快的。我不知道任何就地合并排序的实现不会执行大量额外的移动操作,从而削弱性能。我也不知道。我也不知道任何稳定的快速排序实现不会使用O(n)额外内存。我读过这两种方法都存在,但都很复杂,并且有很大的常数因素使它们变慢。我不知道任何就地合并排序的实现都不会执行大量额外的移动操作,从而削弱性能。我也不知道。我也不知道任何稳定的快速排序实现都不会使用O(n)额外内存。我已经读到这两种方法都存在,但都很复杂,并且有很大的恒定因素使它们变慢。这里不鼓励只使用链接的答案。你好,大卫!看来你对我答案的否决已经完成了。然而,如果你仔细阅读这个问题,你会发现答案只有两个字:“合并排序”。他要求一种快速而稳定的方法对他的列表和我的答案进行排序。我认为你需要帮助,伙计我认为你应该停止个人反应,试着用客观的观点看待批评。在这里,您提供了一个指向您自己代码的链接,并且没有试图讨论问题中提到的算法的优点。无论如何,这都不能回答这个问题。如果你不认为应该允许向下投票,那你就找错地方了。这不是一个“地方”,伙计。我知道你认为你的后院是这样的,但事实并非如此,相信我。我不认为这是我的后院,但我确实认为我理解它是如何运作的。如果你对向下投票的概念有疑问,如果你觉得应该禁止向下投票,那么你可以向meta咨询。若你们不同意关于只链接的答案的指导原则,再一次,把它放在元上。这里不鼓励只链接的答案。嗨,大卫!看来你对我答案的否决已经完成了。然而,如果你仔细阅读这个问题,你会发现答案只有两个字:“合并排序”。他要求一种快速而稳定的方法对他的列表和我的答案进行排序。我认为你需要帮助,伙计我认为你应该停止个人反应,试着用客观的观点看待批评。在这里,您提供了一个指向您自己的代码a的链接