每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法

第一次写关于python的文章,说的不当之处,多多指正,我积极改正

在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html

搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆

目录

冒泡排序法

选择排序法

冒泡排序法

冒泡类似于汽水现象,摇动一下,就有很多泡往上冒,概念不多说,直接看一张执行的结果图,看图分析,如下

  图片中将每次的排序过程都打印出来,这样一看,就很简洁明了,比如第一次排序,相邻两个数进行比较,直到100大于2时,做了交换,然后没有数比100再大,所以100排在了最后,类似于找到了最大的值,第二次排序,就是找到第二大的值,并排在倒数第二个,依次类推

代码实现比java简单,大众之言果然不假,没有java一些条件的限制,比如声明变量这些,python中是直接使用,见代码如下:

 #coding=utf-8
lis = raw_input('请输入十个正整数:')
arrays=[int(a) for a in lis.split()]
print(arrays)
for a in range(len(arrays)):
for b in range(len(arrays)-1):
if arrays[b] > arrays[b+1]:
temp = arrays[b]
arrays[b] = arrays[b+1]
arrays[b+1] = temp
for c in arrays:
print(str(c)),

  这是很简单的排序,输入数据,通过for循环排序,输出结果,文前所贴图片,就是在该基础上加了几句代码,目的只是让排序过程更直观,代码如下:

#coding=utf-8
lis = raw_input('\n请输入十个正整数:')#2版本的需要使用raw_input输入
arrays=[int(a) for a in lis.split()] #将输入每个数以空格键隔开做成数组
print("输入的十个整数为:")
print(arrays)
for a in range(len(arrays)): #取arrays的长度做为循环条件
for b in range(len(arrays)-1): #取arrays-1的长度做为循环条件
if arrays[b] > arrays[b+1]: #如果数组中的第一个值大于第二个值
temp = arrays[b] #则将大的值arrays[b]赋值在temp中
arrays[b] = arrays[b+1] #将小的值arrays[b+1]赋值在第一个值中
arrays[b+1] = temp #将temp中的值赋值在第二个值中,实现更换位置
print("\n第%d" % (a + 1) + "次排序为:")
for c in range(len(arrays)): #循环获取数组的长度
print arrays[c], #打印排序的过程
print("\n最终的排序为:")
for c in arrays: #循环获取数组长度
print str(c), #打印最终的排序结果,输入逗号是为了不换行显示

在琢磨python的时候,遇到两个小问题,也是自己对python语言的不熟悉导致

问题一:

  由于装的是2.7版本的python,input是需要使用raw_input来实现,在使用input函数的时候,运行程序就报File "<string>", line 1, in <module>错误

问题二:

  使用print arrays[c]输出数组排序时,没有按一行输出,查看结果不直观,通过度娘查询,更多的是使用end来结束,发现该语言只支持3,然后查询到在输出语句后面加,逗号即可

两个很小很小的问题,但对于我刚学习python还是琢磨了一番,所以在此记录下

选择排序法

冒泡排序磕磕绊绊成功后,选择排序法就相对简单一些了,排序逻辑上稍有些不同而已

选择排序是将,最大或者最小值(依条件而定)与第一个值交换顺序,与冒泡不同,看如图所示:

  从图中可知,第一次排序中,是找到了最大的值100与第一位值交换了顺序,第二次排序,则是找到第二大的值与第二位交换顺序,以此类推

直接看代码,如下:

 #coding=utf-8
lis = raw_input('\n请输入十个正整数:')
arrays=[int(a) for a in lis.split()]
print("输入的十个整数为:")
print(arrays)
for a in range(0,len(arrays)-1):
max = arrays[a] #设定一个最大值max
count = a #count是记住角标
for b in range(a+1,len(arrays)):
if max < arrays[b]: #如果默认的最大值小于数组值arrays[b]
max = arrays[b] #则将arrays[b]中的值赋值给max
count = b #角标赋给count
temp = arrays[a] #则将大的值arrays[a]赋值在temp中
arrays[a] = arrays[count] #将小的值arrays[count]赋值在第一个值中
arrays[count] = temp #将temp中的值赋值在第二个值中,实现更换位置
print("\n最终的排序为:")
for c in arrays: #循环获取数组长度
print str(c), #打印最终的排序结果,输入逗号是为了不换行显示

  这是实现选择排序的基本语法,再看如图所示的代码,如下:

 #coding=utf-8
lis = raw_input('\n请输入十个正整数:')#2版本的需要使用raw_input输入,每个数之间用空格隔开
arrays=[int(a) for a in lis.split()]
print("输入的十个整数为:")
print(arrays)
for a in range(0,len(arrays)-1): #取arrays-1的长度做为循环条件
max = arrays[a] #设定一个最大值max
count = a #count是记住角标
for b in range(a+1,len(arrays)): #取a+1,arrays的长度做为循环条件
if max < arrays[b]: #如果默认的最大值小于数组值arrays[b]
max = arrays[b] #则将arrays[b]中的值赋值给max
count = b #角标赋给count
temp = arrays[a] #则将大的值arrays[a]赋值在temp中
arrays[a] = arrays[count] #将小的值arrays[count]赋值在第一个值中
arrays[count] = temp #将temp中的值赋值在第二个值中,实现更换位置
for c in arrays: #循环获取数组长度
print str(c), #打印最终的排序结果,输入逗号是为了不换行显示

  第一次使用python,看到了便捷之处,也看到了自身的短缺,需要更好的学习之。上述就是今天捣鼓的内容,内容不是很新奇,但很经典,面试过程大多都会问到。自然,这两个代码还有可优化之处,可增加中断循环,当已是有序的情况下,就跳出循环,节省排序时间,学习是个很有趣的过程,加油!

基于python语言的经典排序法(冒泡法和选择排序法)的更多相关文章

  1. python中对列表元素大小排序(冒泡排序法和选择排序法)

    前言:排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的两种排序算法,选择排序法 ...

  2. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

  3. 关于《selenium2自动测试实战--基于Python语言》

    关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...

  4. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

  5. 基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

    基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...

  6. 关于《Selenium3自动化测试实战--基于python语言》

    2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...

  7. selenium2环境搭建----基于python语言

    selenium支持多种语言如java.c#.Python.PHP等,这里基于python语言,所以这里搭建环境时需做俩步操作: ----1.Python环境的搭建 ----2.selenium的安装 ...

  8. 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法

    虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...

  9. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)

    Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)

随机推荐

  1. 【转】Python之文件与目录操作(os、zipfile、tarfile、shutil)

    [转]Python之文件与目录操作(os.zipfile.tarfile.shutil) Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读 ...

  2. Makefile经典教程(一个很棒很清晰的讲解)【转】

    转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...

  3. linux 高级字符设备驱动 ioctl操作介绍 例程分析实现【转】

    转自:http://my.oschina.net/u/274829/blog/285014 1,ioctl介绍 ioctl控制设备读写数据以及关闭等. 用户空间函数原型:int ioctl(int f ...

  4. 查看tomcat运行状态

    实时查看tomcat并发连接数: netstat -na | grep ESTAB | grep 8080 | wc -l 实时查看apache并发连接数: netstat -na | grep ES ...

  5. 云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败

    云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败 文件系统宕机,重启后报错,无法启动 处理流程: 1.编辑 ...

  6. 使用apache和nginx代理实现tomcat负载均衡及集群配置详解

    实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 ...

  7. S5PV210 ADC转换

    第一节 S5PV210的ADCS5PV210的ADC可支持10bit和12bit,它支持10路输入,然后将输入的模拟的信号转换为10bit或者12bit的二进制数字信号.在5MHz的时钟下,最大转换速 ...

  8. 玩树莓派(raspberry pi) 2/3 raspbian的遇到的一些问题

    raspberry pi买回来玩了一段时间,现在就记录一下入门遇到的一些问题吧. 首先是烧写镜像,和安装电脑系统是一样的道理. 先要有一个制作一个U启动盘.先将SD卡格式化,再用Win32DiskIm ...

  9. robots.txt、humans.txt、.editorconfig、.gitignore、LICENSE.txt、README.md、CHANGLOG.md

    robots.txt搜索引擎查看的时候会查看这个文件,告诉搜索引擎哪些文件可以查看,哪些文件不能查看 当搜索引擎搜索网站的时候,会看有这个文件没,如果有,会通过里面的文件来确定哪些文件能看,哪些文件不 ...

  10. OCM_第二十天课程:Section9 —》Data Guard _ DATA GUARD 搭建/DATA GUARD 管理

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...