【发布时间】:2021-06-19 09:47:08
【问题描述】:
这是我的实现。当我放置 10000 个大小为 1000000 的数组时,它会排序 300 秒。 我的另一种算法,合并排序执行 40 秒。 我想知道是否有一些事情会减慢我的算法。
template <typename TYP> void quick_sort(TYP *tab, int poczatek, int koniec) {
int i = poczatek;
int j = poczatek;
int srodek = (poczatek + koniec) / 2;
int piwot = tab[srodek];
swap(tab[srodek], tab[koniec]);
for (i = poczatek; i < koniec; i++) {
if (tab[i] < piwot) {
swap(tab[i], tab[j]);
j++;
}
}
swap(tab[koniec], tab[j]);
if (poczatek < j - 1)
quick_sort(tab, poczatek, j - 1);
if (j + 1 < koniec)
quick_sort(tab, j + 1, koniec);
}
【问题讨论】:
-
你也可以分享其他算法吗?以及您如何测量代码?具体来说,您提供了哪些意见?
-
快速排序在众所周知的条件下表现不佳。您似乎没有采取措施避免这些情况。
-
尝试运行内置 C
qsort并查看其时间,以了解是算法遇到了退化情况,还是您的实现被破坏了。 -
40 秒对于 1000000 个值的数组来说似乎相当慢。输入类型是什么?您是否启用了编译器优化标志?
-
qsort不要求它实际使用快速排序算法。
标签: c++ performance sorting merge