0

测试是创建一个大小为 10000 的数组。使用值 10000 将其初始化为 1,然后使用冒泡排序来反转顺序。由于冒泡排序是最糟糕的排序之一,这应该需要相当长的时间. 但是,时序的分辨率是有限的。

解决方案是把任务放在一个循环中,重复一千或一百万次——无论需要什么让数字达到你可以处理的程度。我的代码中出现错误。请在下面查看我的代码。

以下命令在 linux 上运行:
gcc -o sort sort.c -O2
time ./sort

gcc -m32 -o sort sort.c -O2 -march=pentium4
time ./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;
}
4

2 回答 2

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;
           }
       }
   }
}
于 2013-05-18T18:49:37.343 回答
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;
        }
于 2013-05-18T19:00:11.680 回答