冒泡排序时间C程序

时间:2013-05-18 18:40:24

标签: linux gcc bubble-sort

测试是创建一个大小为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;
}

2 个答案:

答案 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;
        }