【发布时间】:2016-07-19 18:39:54
【问题描述】:
我目前正在尝试实现三分区快速排序。下面的代码工作正常,但运行时间不够。总的来说,我对数据结构、算法和“深度”编程是新手,所以我试图摆弄它以使其在更短的时间内工作的尝试基本上没有结果。 (内存性能很好。)
我的直觉是改变枢轴,但我担心它不会是三向快速排序,那么。
#include <iostream>
#include <vector>
#include <cstdlib>
using std::vector;
using std::swap;
int partition3(vector<int> &a, int l, int r) {
int x = a[l];
int j = l;
int k = r;
int i = l+1;
while (i <= k) {
if (a[i] < x) {
swap(a[i],a[j]);
j++;
i++;
}
else if(a[i] > x) {
swap(a[i],a[k]);
k--;
}
else {
i++;
}
}
return j;
}
void randomized_quick_sort(vector<int> &a, int l, int r) {
if (l >= r) {
return;
}
int k = l + rand() % (r - l + 1);
swap(a[l], a[k]);
while (l < r) {
int m = partition3(a, l, r);
if ((m-l) < (r-m)) {
randomized_quick_sort(a, l, m - 1);
l = m + 1;
}
else {
randomized_quick_sort(a, m + 1, r);
r = m - 1;
}
}
}
int main() {
int n;
std::cin >> n;
vector<int> a(n);
for (size_t i = 0; i < a.size(); ++i) {
std::cin >> a[i];
}
randomized_quick_sort(a, 0, a.size() - 1);
for (size_t i = 0; i < a.size(); ++i) {
std::cout << a[i] << ' ';
}
}
【问题讨论】:
-
rand()可能需要一些时间。需要随机吗?你能找到更快的随机数生成器吗? -
您能更明确地说明您测量的内容吗? IO 会很慢而且很吵。
rand()依赖于实现。确保在测量速度时不包括它们。 -
这是给评分系统的——我提交这个是为了在线测试。
-
添加快速自定义随机函数source
-
我投票结束这个问题,因为这基本上是一个代码审查(你不能在堆栈交换网络中选择另一个站点)。
标签: c++ algorithm performance time quicksort