zoukankan      html  css  js  c++  java
  • 大话算法-排序-冒泡排序

    1、冒泡排序是反复扫描序列,在扫描过程中顺次比较两个元素大小,如果逆序交换位置(如果某一趟冒泡排序中,没有发现一个逆序,则可以直接结束整个排序),

    2、最好情况:序列都是正序的,时间复杂度O(n),比较n-1次 交换0次,

    3、最坏的情况:序列完全逆序。时间复杂度是O(n2),空间复杂度O(1)

    # 一般方法
    def bubble(nlist):
        nlen = len(nlist)
        if nlen == 0:
            return
        if nlen == 1:
            return nlist
        #i表示趟数,最多进行n-1趟    
        for i in range(nlen-1,0,-1):
            for j in range(i):
                if nlist[j] > nlist[j+1]:
                    nlist[j],nlist[j+1] = nlist[j+1],nlist[j]
        return nlist
    
    # 优化
    def bubble(nlist):
        nlen = len(nlist)
        if nlen == 0:
            return
        if nlen == 1:
            return nlist
        flag = 1
        while flag and nlen:
            #如果哪一趟没有交换(全部顺序),则表示全部排好序(剩下的都排好序不用交换)
            flag = 0
            for j in range(nlen-1):
                # 判断是否有逆序的,如果有调换
                if nlist[j] > nlist[j+1]:
                    nlist[j],nlist[j+1] = nlist[j+1],nlist[j]
                    flag = 1
            # print(flag,nlen,nlist)
            nlen -= 1
            
        return nlist
  • 相关阅读:
    团队项目冲刺第6天
    冲刺阶段第五天
    冲刺阶段前四天总结
    "博客园"用户体验分析
    测试计划
    scrum敏捷开发
    团队开发_软件项目风险管理
    sprint计划会议
    svn 之 svn的两种开发模式
    redis 之 搭建真实集群
  • 原文地址:https://www.cnblogs.com/imlifelong/p/11475668.html
Copyright © 2011-2022 走看看