【发布时间】:2026-01-24 00:10:01
【问题描述】:
我遇到了一个快得离谱的冒泡排序算法......就像在 0.03 秒内快速排序 100,000 个全长整数一样。我知道冒泡排序被认为是效率最低的排序算法之一,那么是什么让这个算法变得更好呢?
我发现如果第一次没有交换任何项目(这意味着它已经排序),它会停止排序,但这不应该影响颠倒顺序的情况。
附言谁能想到一种更快地对这么多整数进行排序的方法?也许基数排序?
void sort(int list[], int n)
{
int i;
int j;
int gap;
int swapped = 1;
int temp;
gap = n;
while (gap > 1 || swapped == 1)
{
gap = gap * 10 / 13;
if (gap == 9 || gap == 10)
{
gap = 11;
}
if (gap < 1)
{
gap = 1;
}
swapped = 0;
for (i = 0, j = gap; j < n; i++, j++)
{
if (list[i] > list[j])
{
temp = list[i];
list[i] = list[j];
list[j] = temp;
swapped = 1;
}
}
}
}
【问题讨论】:
-
这可以通过使用三个连续的异或操作来加快速度,而不是在堆栈上有一个变量并使用这三个赋值语句。
标签: c algorithm sorting bubble-sort