Python 基础算法

算法是指解题方案的准确和描述,那么衡量一个算法的优劣可以用时间复杂度和空间复杂度来表示。

1.时间复杂度:O(1),O(n),O(n^2),O(n^3),O(log2n),O(nlog2n),O(n!)等等

比如说:  

 a = 2 是O(1)

O(n^2)
交换i和j的内容
     sum=0;                 (一次)
     for(i=1;i<=n;i++)       (n次 )
        for(j=1;j<=n;j++) (n^2次 )
         sum++;       (n^2次 )
解:T(n)=2n^2+n+1 =O(n^2)


    for (i=1;i<n;i++)
    {
        y=y+1;         ①   
        for (j=0;j<=(2*n);j++)    
           x++;        ②      
    }         
解: 语句1的频度是n-1
          语句2的频度是(n-1)*(2n+1)=2n^2-n-1
          f(n)=2n^2-n-1+(n-1)=2n^2-2
          该程序的时间复杂度T(n)=O(n^2).         

    a=0;
    b=1;                      ①
    for (i=1;i<=n;i++) ②
    {  
       s=a+b;    ③
       b=a;     ④  
       a=s;     ⑤
    }
解:语句1的频度:2,        
           语句2的频度: n,        
          语句3的频度: n-1,        
          语句4的频度:n-1,    
          语句5的频度:n-1,                                  
          T(n)=2+n+3(n-1)=4n-1=O(n).
                                                                                                 
     i=1;       ①
    while (i<=n)
       i=i*2; ②
解: 语句1的频度是1,  
          设语句2的频度是f(n),   则:2^f(n)<=n;f(n)<=log2n    
          取最大值f(n)= log2n,
          T(n)=O(log2n )

    for(i=0;i<n;i++)
    {  
       for(j=0;j<i;j++)  
       {
          for(k=0;k<j;k++)
             x=x+2;  
       }
    }

2.基本算法

(1)冒泡算法(O(n^2))

data = [1,2,3,6,9,7,45,12]

loop_count = 0
for i in range(len(data)):
    for j in range(len(data) - i - 1):
        if data[j] < data[j+1]:
            tmp = data[j]
            data[j] = data[j+1]
            data[j+1] = tmp
        loop_count += 1
    print(data)
print(data)
print('time:', loop_count)
(2)最小算法(O(n))

loop_count = 0
mid_num = data[0]
for i in range(1, len(data)):
    if data[i] > mid_num:
        mid_num = mid_num
    else:
        mid_num = data[i]
    loop_count += 1
print(mid_num)
print(loop_count)
3.插入排序

for index in range(1, len(data)):
    currunt_num = data[index]
    position = index
    while position > 0 and data[position - 1] >currunt_num:
        data[position] = data[position - 1]
        position -= 1
    data[position] = currunt_num
print(data)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值