测试是创建一个大小为10000的数组。使用值10000到1初始化它,然后使用冒泡排序来反转顺序。由于冒泡排序是最糟糕的排序之一,这应该采取相当长的时间。但是,时间的分辨率是有限的。
解决方案是将任务置于一个循环中,重复它一千或一百万次 - 无论如何将数字提升到你可以处理的东西。我的代码中出现错误。请参阅下面的代码。
以下命令在linux上运行:
gcc -o sort sort.c -O2
时间./sort
gcc -m32 -o sort sort.c -O2 -march = pentium4
时间./sort
#include <stdio.h>
void bubbleSort(int numbers[], int array_size)
{
int i, j, temp;
for (i =0; i <array_size; i++)
{
for (j =0; j<array_size-1; j++)
{
if (numbers[j] > numbers[j+1]) {
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
}
int main(void)
{
int array[10000];
int i;
for(i=10000;i!=0;i--)
{
array[i-1]=i;
}
bubbleSort(array,10000);
for(i=0;i<10000;i++)
{
printf("%d\n",array[i]);
}
return 0;
}
答案 0 :(得分:0)
试试这个
void bubbleSort(int numbers[], int array_size)
{
int i, j, temp;
for (i =0; i <array_size-1; i++)
{
for (j =0; j<array_size - i -1; j++)
{
if (numbers[j] > numbers[j+1])
{
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
}
答案 1 :(得分:0)
以下代码按升序存储数组中的数字。
for(i=10000;i!=0;i--)
{
array[i-1]=i;
}
您的排序算法还会按升序对数字进行排序,因此您不会发现数组中数字的任何更改。
if (numbers[j] > numbers[j+1])
{
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
如下所示更改以上内容,
if (numbers[j] < numbers[j+1])
{
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}