冒泡之递归与循环时间比对

import numpy as np;
import matplotlib.pyplot as plt;
from time import time;

def bbsort(lll):
    length = len(lll);
    if length == 1:
        return lll;
    for i in range(length-1):
        if lll[i] > lll[i+1]:
            lll[i],lll[i+1] = lll[i+1],lll[i];
    new = bbsort(lll[:-1])+[lll[-1]];
    return new;

def bbsort2(lll):
    for i in range(len(lll)-1):
        for j in range(len(lll)-i-1):
            if lll[j] > lll[j+1]:
                lll[j],lll[j+1] = lll[j+1],lll[j];
    return lll;

if __name__ == '__main__':
    tt1 = [];
    tt2 = [];
    x = [i for i in range(1,900,3)];
    for j in range(1,900,3):
        height = np.round(np.random.rand(j)*100+100,2).tolist();
        t1 = time();
        height_new = bbsort(height);
        t2 = time();
        height = np.round(np.random.rand(j)*100+100,2).tolist();
        t3 = time();
        height_new2 = bbsort2(height);
        t4 = time();
        tt1.append(t2-t1);
        tt2.append(t4-t3);
    plt.plot(x,tt1,'r--',label='recursion');
    plt.plot(x,tt2,'b--',label='for');
    plt.xlabel('length of list/k');
    plt.ylabel('time/s');
    plt.legend(loc = 'upper left');
    plt.show();

加个flag,用来for循环中查看是否有数据交换,如果没有则排序完毕,减少时间

def bbsort2(L):
    for i in range(len(L)-1):
        flag = False;
        for j in range(len(L)-i-1):
            if L[j] > L[j+1]:
                L[j],L[j+1] = L[j+1],L[j];
                flag = True;
        if flag == False: #如果这一轮循环未发生数据交换,则可以停止排序
            break;
    return L;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值