首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

排序1亿个数据,尽量快的快速排序

2013-09-11 
排序1亿个数据,尽可能快的快速排序?void qsort3(int l, int u){int i, jint tint tempif (l u)retur

排序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);
}

引用:
求所用的基数排序代码。

我被基数排序郁闷了。

[解决办法]
位图法局限性太大,只能用在特殊场合下。大规模数据的内存排序我还是觉得基数排序法更实用。

热点排行