排序1亿个数据,尽可能快的快速排序?
void qsort3(int l, int u)
{int i, j;
int t;
int temp;
if (l >= u)
return;
t = x[l];
i = l;
j = u+1;
for (;;) {
do i++; while (i <= u && x[i] < t);
do j--; while (x[j] > t);
if (i > j)
break;
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
swap(l, j);
qsort3(l, j-1);
qsort3(j+1, u);
}
小弟,用《编程珠玑》上的快排方法qsort3(如上面的算法)对一亿个数进行快速排序,时间大概是15秒,请问有什么优化方法!不胜感激
[解决办法]
不支持负数。
template <class _T>
void rsort(_T *src, _T *tmp, int len);
template <class _T>
void rsort(_T *src, _T *tmp, int len, int bit)
{
int idx, sum, *cur;
_T* ptr;
int cnt[256] = { 0 };
ptr = src;
idx = len;
do
{
cnt[((*ptr++) >> bit) & 0xFF]++;
}
while(--idx != 0);
cur = cnt;
idx = 256;
sum = 0;
do
{
int c = *cur;
*cur++ = sum;
sum += c;
}
while(--idx != 0);
ptr = src;
idx = len;
do
{
sum = *ptr++;
tmp[cnt[(sum >> bit) & 0xFF]++] = sum;
}
while(--idx != 0);
}
template <class _T>
void rsort(_T *src, _T *tmp, int len)
{
rsort(src, tmp, len, 0);
rsort(tmp, src, len, 8);
rsort(src, tmp, len, 16);
rsort(tmp, src, len, 24);
}