热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python数组冒泡排序_排序算法(一)冒泡排序

(升序)思路:比较相邻元素,如果第一个比第二个大,就交换他们每一对都执行上一步工作,从开始第一对到末尾最后一对,

(升序)思路:

比较相邻元素,如果第一个比第二个大,就交换他们

每一对都执行上一步工作,从开始第一对到末尾最后一对,这步完成时,最大的元素位于数组末尾。

重复以上步骤,除了最后一个元素

每次对越来越少的元素重复以上步骤,直到没有任何一堆数字需要比较。

一趟排序:实现最大的元素位于数组末尾。

# 一趟排序

def bubble_Sort(alist):

n = len(alist)

for j in range(n-1): #数组长度为n,则需比较次数是n-1,两两比较的元素(n1,n2)中的n1下标是从0~n-2

if alist[j]>alist[j+1]: #排序不正确,就交换两者位置

alist[j],alist[j+1]=alist[j+1],alist[j]

return alist

if __name__=="__main__":

alist = [54,26,93,17,77,31,44,55,20]

print(bubble_Sort(alist))

输出

[26, 54, 17, 77, 31, 44, 55, 20, 93]

每一趟排序结束后,下一次排序数组需要除开放在数组末尾的已排序数字

def bubble_Sort(alist):

n = len(alist)

for i in range(n-1,0,-1): # range(n-1,0,-1)--> n-1,...,1. 每执行一趟排序,下一次排序的序列长度都需要-1(除去上一次排序的最大值),最一趟排序的序列长度为n,第二次为n-1,...,直到最后一趟只需比较两个元素,序列长度为2

for j in range(i):

if alist[j]>alist[j+1]:

alist[j],alist[j+1]=alist[j+1],alist[j]

return alist

if __name__=="__main__":

alist = [54,26,93,17,77,31,44,55,20]

print(bubble_Sort(alist))

输出

[17, 20, 26, 31, 44, 54, 55, 77, 93]

优化:如果给定的序列如[17, 20, 26, 31,93,44,55,77],这样的部分有序数组,当一趟排序后,就能得到升序数组。以后的每次排序都是在浪费资源,对这样的情况进行修正。

def bubble_Sort(alist):

n = len(alist)

for i in range(n-1,0,-1):

count = 0 # 记录每一趟排序的交换次数,如果count=0,那就是没有交换,整个数组已有序

for j in range(i):

if alist[j]>alist[j+1]:

alist[j],alist[j+1]=alist[j+1],alist[j]

count+=1

# print(alist)

if count == 0:

break

return alist

if __name__=="__main__":

alist =[17, 20, 26, 31,93,44,55,770]

print(bubble_Sort(alist))

输出

[17, 20, 26, 31, 44, 55, 93, 770]

总结:

冒泡排序最好的时间复杂度是O(N),最坏的时间复杂度是O(N^2)

平均时间复杂度O(N^2).空间复杂度O(1)

可以看出冒泡排序的时间复杂度和数组初始状态有关。



推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 深刻理解 python中函数的参数 引用的传递方式
    函数的参数作为引用Python唯一支持的参数传递模式是共享传参(callbysharing)。共享传参指函数的各个形参获得实参中各个引用的副本。也就是 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 这是一个愚蠢的问题,但我只是对此感到好奇.假设我在Pythonshell,我有一些我查询的数据库对象.我做:db.query(的queryString)该查询在0xffdf842c ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
麦豪小仙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有