插入排序的比较时间复杂度

时间:2013-06-11 07:44:37

标签: java c algorithm performance-testing

我在C(Visual Studio)和Java(Eclipse)中实现了插入排序,以分析完成所需的时间并比较两种语言的差异。

我试图找出算法补充所需的最坏情况时间。(将递减数组转换为递增数组)。

我使用10,000,5,000和100,000个条目的样本运行我的代码,以下是观察结果:

In C:
10000: 0.172 seconds
50000: 3.874 seconds
100000: 15.384 seconds

whereas in Java
10000: 0.048 seconds
50000: 0.385 seconds
100000: 1.924 seconds

我的代码是普通的插入排序代码。没什么新鲜的。测量的时间仅是插入排序代码,而I / O操作与其无关。 e.g:

Input
Timer starts here
Insertion Sort
Timer ends
Summary(Time required and all)

我认为C比Java快,但我不能证明这个结果是正确的。

编辑:这是C代码

void InsertionSort(int a[]) {
    int i;
    clock_t st, end;
    st = clock();
    for (i = 1; i < MAX; i++)   {
        int temp = a[i];
        int pos = i - 1;
        while(a[pos] > temp)    {
            a[pos + 1] = a[pos];
            pos--;
        }
        a[pos + 1] = temp;
    }
    end = clock();
    printf("\nSorting Completed. Time taken:%f", (double)(end - st) / CLOCKS_PER_SEC);
}

和Java代码:

public void Sort(int a[], int size) {
        int i;
        for (i = 1; i < size; i++)  {
            int temp = a[i];
            int pos = i - 1;
            while(pos >= 0 && a[pos] > temp)    {
                a[pos + 1] = a[pos];
                pos--;
            }

            a[pos + 1] = temp;
        }
}

1 个答案:

答案 0 :(得分:0)

我无法使用jconsole来打印时间,因此我使用最粗略的方式来比较Linux上的时间(我使用了插入排序实现)。

C(gcc与gcc -Wall -Wextra -Wunreachable-code -Waggregate-return -Wshadow对齐):

$ gcc -O3 insertion_sort.c 
$ date; ./a.out; date
Tue Jun 11 20:16:24 MYT 2013
Tue Jun 11 20:16:36 MYT 2013

爪哇:

$ javac Main.java
$ date; java Main; date
Tue Jun 11 20:19:11 MYT 2013
Tue Jun 11 20:19:32 MYT 2013

很明显C表现优于Java,我使用了一个大小为150 000的数组并反向排序。我提供了我的代码链接:

C

Java

我的建议是建立一个运行Linux操作系统的虚拟机,并自己尝试(学习一些Linux是非常有用的,更不用说C编程轻而易举了。)