C语言中四种排序方法各有什么优劣?
Shell排序通过分组插入排序减少数据交换和移动,平均效率达到O(nlogn),比冒泡快5倍,比插入快2倍。虽然它比快速排序等慢,但算法简单,适合数据量在5000以下且对速度要求不极端苛刻的场合,尤其是小数列重复排序。
Shell排序通过分组插入排序减少数据交换和移动,平均效率达到O(nlogn),比冒泡快5倍,比插入快2倍。虽然它比快速排序等慢,但算法简单,适合数据量在5000以下且对速度要求不极端苛刻的场合,尤其是小数列重复排序。
这回答有点片面了。Shell排序虽然简单,但它的性能严重依赖于增量序列的选择,不像快排那样有稳定的平均表现。在5000以下的数据量,可能看不出太大差距,但一旦数据稍微杂乱,Shell的劣势就出来了。别被“比冒泡快5倍”这种对比误导了,和现代排序算法比,它的上限太低。对于非极端场合,用qsort或者自己写个快排优化版可能更稳妥,而不是迷信希尔排序。