1.时间复杂度和简单排序算法

一.时间复杂度

1. 常数操作O(1)

跟数据量无关,固定时间的,可以进似记为1

2. 具体时间复杂度估计计算:

  • 解释:根据数据量设N,以固定时间为1,进行全部过程的估计(考虑与数据量有关的过程,与数据量无关的过程就是一阶常数)。

如冒泡排序进行时间复杂度估计:

void babble_sort(int* table, int N)
{
    for(int i=0;i<N;i++)
        for(int j=0;j<N-i-1;j++)
            {
                if(table[j]>table[j+1])
                {
                    int tmp = table[j+1];
                    table[j+1] = table[j];
                    table[j] = tmp;
                }
            }
}

其中:读取table[j]、table[j+1]的值要消耗固定时间

第一次:要看table[j]与table[j+1],就是要2N次

                要比较大小N次;        设发生互换的次数为m次,记为常数1

第二次:

                要看table[j]与table[j+1],就是要2(N-1)次

                要比较大小N-1次;        设发生互换的次数为m次,记为常数1

。。。

第N次:

                要看table[j]与table[j+1],就是要2次

                要比较大小1次;        设发生互换的次数为m次,记为常数1

总共消耗时间:

                T=3(N+N-1+....+1)+N=3*N*(N-1)/2+mN = 1.5N^2-1.5N+mN

        抽象为T=a*N^2+b*N+c

 可知,当数据量N越来越大时,T的大小主要受N^2影响,故记其时间复杂度为O(N^2);

  • 时间复杂度评价:

如果时间复杂度指标不一样,低阶指标的算法时间复杂度更优。如果同一阶的时间复杂度,其实按照理论去估计,因为可能底层操作不大明确,很难用系数来理论说明,应该实际设计数据集去运行,来获取哪个更加优劣。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值