我有一个值数组,它几乎被排序了,但是有一些值错位(例如在100000个值中有50个错位)。如何最有效地对其进行排序?
如果输入已经被部分排序,Smoothsort的优点在于它可以接近O(n)的时间。
鸡尾酒排序在大O符号表示法中的复杂度在最坏情况和平均情况下都是O(n²),但如果在应用排序算法之前列表已经大部分排序,则它会趋近于O(n)。
sort()
)。关于timsort的描述点击此处。我的第一反应是识别错位的元素并将它们移动到一个单独的数组中,在那里使用任何你喜欢的算法进行排序(由于数量很少,所以不应该有影响),然后再合并排序回来。
找到最佳的排序算法取决于您对数据的控制程度。
排序算法被归类为插入、交换、选择、合并等方法。这意味着如果您可以控制插入新数据的机制,则可以在此过程中对它们进行排序。如果只能在数据到位后对数组进行排序,那么最适合此操作的算法完全不同。
无论如何,这些都是有趣的阅读材料:
qsort
或mergesort
函数已经以高效的方式处理了这种特殊情况。