【发布时间】:2015-04-05 22:12:29
【问题描述】:
我在 C 中设置了 2 个排序算法函数,基数排序和快速排序
但是当我用 gdb 检查这些功能时,发现快速排序的指令数量比基数排序少。而且感觉更快...
据我所知,基数排序是最快的排序算法。
以下是我在 wiki 上的排序代码。
1.快速排序
void q_sort(int numbers[], int left, int right)
{
if(left == right) return;
int pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = numbers[left];
while (left < right)
{
while ((numbers[right] >= pivot) && (left < right))
right--;
if (left != right)
{
numbers[left] = numbers[right];
left++;
}
while ((numbers[left] <= pivot) && (left < right))
left++;
if (left != right)
{
numbers[right] = numbers[left];
right--;
}
}
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
q_sort(numbers, left, pivot-1);
if (right > pivot)
q_sort(numbers, pivot+1, right);
}
2.基数排序
/**
* @data array
* @size the number of array
* @p cipher of the biggest number
* @k notation( in case of decimal, it is 10)
*/
void rxSort(int *data, int size, int p, int k) {
int *counts,
*temp;
int index, pval, i, j, n;
if ( (counts = (int*) malloc(k * sizeof(int))) == NULL )
return;
if ( (temp = (int*) malloc(size * sizeof(int))) == NULL )
return;
for (n=0; n<p; n++) {
for (i=0; i<k; i++)
counts[i] = 0; // initialize
// n:0 => 1, 1 => 10, 2 => 100
pval = (int)pow((double)k, (double)n);
for (j=0; j<size; j++) {
// if the number is 253
// n:0 => 3, 1 => 5, 2 => 2
index = (int)(data[j] / pval) % k;
counts[index] = counts[index] + 1;
}
for (i=1; i<k; i++) {
counts[i] = counts[i] + counts[i-1];
}
for (j=size-1; j>=0; j--) {
index = (int)(data[j] / pval) % k;
temp[counts[index] -1] = data[j];
counts[index] = counts[index] - 1;
}
memcpy(data, temp, size * sizeof(int));
}
}
有一些限制如下
1.数组大小设置为256.
2.数字范围为0~64。
3. 对不同的数组进行四次运算。
当我测试时,我将数组的大小设置为 50
然后,指令的数量
基数:15030
快速 : 7484
快速获胜......T_T.. 为 Radix 感到难过......快速排序真的更快吗?
【问题讨论】:
-
看来您可能误解了渐近复杂性...
-
实际上,我是算法处女。如果你能解释这意味着什么,我将非常感激。
-
您的样本量太小 - 请尝试对 5000 万个值进行排序。此外,执行的指令数量与性能之间没有一对一的关系。顺便问一下,您是如何确定执行的指令数的?
-
@500-InternalServerError with gdb & set break point & and some kinde gdb instructions
-
it turns out that quick sort has smaller number of instructions than quick sort.哦。永远不要将大脑周期投入到低于 5 秒的计时结果中。
标签: algorithm