• 插入排序的算法分析


    #include<iostream>
    using namespace std;
    void insert_sort_function(int array[],int size)
    {
        int key;                                          //总次数                                      单位时间
        for(int i=1, j;i!=size;++i)                       //n                                            c1
        {
            
            if(array[i]<array[i-1])                      //n-1                                           c2
            {
                key=array[i];                            //n-1                                           c3
                j=i-1;                                   //n-1                                           c4
                do{
                    array[j+1]=array[j];                //Σt(i),i=2,3…n,t(i)为第i次while体循环的次数       c5
                    j--;                                //Σt(i),i=2,3…n                                  c6
                }while(j>=0 && key<array[j]);           //Σt(i),i=2,3…n                         c7                 
                array[j+1]=key;                         //n-1                                            c8
            }
        }
        for(i=0;i!=size;++i)
            cout<<array[i]<<",";
        cout<<endl;
    }
    int main()
    {
        int array[]={5,2,4,6,1,3};
        int size=6;
        insert_sort_function(array,size);
        return 0;
    }

     以上是插入排序的代码。通常一个算法的运行时间是指在特定输入时,所执行的操作数(步数)。

    则以上的算法的步数为n*c1+(n-1)*c2+(n-1)*c3+(n-1)*c4+c5*Σt(i)+c6*Σt(i)+c7*Σt(i)+c8*(n-1)

    最好的情况下,整个数列为正序,则只会进行if(array[i]<array[i-1])判断,然后直接执行array[j+1]=key,则总消耗为n*c1+(n-1)*c2+c8*(n-1)=(c1+c2+c8)n-(c2+c8),即an+b~O(n).

    最差的情况下,这个数列为倒序,则第i次,while循环体判断的次数为(i-1)次,则总消耗为n*c1+(n-1)*c2+(n-1)*c3+(n-1)*c4+c5*Σ(i-1)+c6*Σ(i-1)+c7*Σ(i-1)+c8*(n-1)=n*c1+(n-1)*(c2+c3+c4+c8)+(n-1)n/2*(c5+c6+c7),即a*n^2+bn+c~O(n^2)

    一般以最差情况下的运行时间为整个算法运行时间的上限。即使平均情况下,时间与最差也是同一个等级。

  • 相关阅读:
    MSDN2010安装及使用(MSDN Library)[转]
    单元测试那些事
    Nhibernate Profiler安装中的问题
    ztree的动态添加
    事件与委托
    linux ls dir
    学习技术资料的思路
    linux目录结构
    是否需要深入了解java平台
    工作中心的改变
  • 原文地址:https://www.cnblogs.com/huang1990/p/2983586.html
Copyright © 2020-2023  润新知