我运行以下快速排序Haskell函数(使用合并和排序算法):
qsort []=[]
qsort (x:xs) =
qsort smaller ++ [x] ++ qsort larger
where
smaller = [a | a <- xs , a<x ] -- edit
larger = [b | b <- xs , b>=x ]
为了测试大量数据的运行时间,我运行以下代码:
qsort [100000,99999..0]
现在需要40分钟,它仍在运行!即使是100,000的清单也不是那么大,所以:
答案 0 :(得分:7)
快速排序的最坏情况时间是 n 2 。您的实现使用第一个元素作为数据透视表,当输入被排序(或反向排序)时,这会导致最坏情况下的性能。
要快速执行 n log n 的预期复杂性,您需要随机选择枢轴,或者在排序之前随机调整输入。