Algorithm 有效函数排序

Algorithm 有效函数排序,algorithm,sorting,ti-basic,Algorithm,Sorting,Ti Basic,我正在为一个函数编程,所以我不能从函数内部使用内置函数。在不修改数字列表本身的情况下,对数字列表进行排序的最有效算法是什么?(递归和列表拆分是公平的游戏,就像数学的一般用法一样。)合并排序简单、高效、稳定:拆分列表、递归排序和合并结果 更具体地说,mergesort采用O(N logn),这是渐近最优的。此外,在实践中(两种算法都经过了修改,以使用特殊用途的排序对短子列表进行排序),mergesort可以与C/C++标准库中使用的修改过的快速排序相媲美 编辑:与快速排序和插入排序等就地排序不同,

我正在为一个函数编程,所以我不能从函数内部使用内置函数。在不修改数字列表本身的情况下,对数字列表进行排序的最有效算法是什么?(递归和列表拆分是公平的游戏,就像数学的一般用法一样。)

合并排序简单、高效、稳定:拆分列表、递归排序和合并结果

更具体地说,mergesort采用O(N logn),这是渐近最优的。此外,在实践中(两种算法都经过了修改,以使用特殊用途的排序对短子列表进行排序),mergesort可以与C/C++标准库中使用的修改过的快速排序相媲美

编辑:与快速排序和插入排序等就地排序不同,mergesort需要辅助内存,并且最容易通过复制而不是交换来实现。

在python和java SE 7中使用。它充分利用了合并排序和插入排序。插入排序是O(n^2),但对于小的数字列表,它比合并排序快


因此,您可以使用它作为一种通用排序算法,如前所述

我想您尝试在列表上调用
SortA
,但计算器不允许您这样做,因为它在函数中?唉。TI-68k上也存在此问题。正是此问题。83系列没有这个问题,但也没有内置参数传递。如果有帮助的话,我在ticalc.org上注意到了这些排序函数:我不想全部阅读,但考虑到您所说的最好的合并和插入排序,并且插入排序修改了原地的值,timsort是否需要任何就地修改?timsort很好,但我认为要在计算器上获得一个好的排序,它比必要的复杂得多。如果你能修改列表,我建议使用quicksort,因为它平均占用更少的内存,但是在这种情况下,mergesort绝对是一种方法。@Justin Peel:还要注意,对于大数据,一个简单的快速排序实现很容易比mergesort慢。好吧,高效快速排序意味着快速排序+解理器选择pivot+(可能)退回到堆排序(参见简介排序)。否则,根据我的经验,与合并排序相比,纯快速排序的性能并不好。