三种排序算法python源码——冒泡排序、插入排序、选择排序
最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法。
冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大的数据都放在数组头和尾的位置,每次比较完成后除去头、尾的数据,进行比较。python源码如下:
def bubble_sort( ):
str_array = raw_input("Input your numbers:")
array = list(str_array)
l = len(array)
i = 0
for i in range(l-1):
for j in range(i, l-i-1):
if array[j+1] < array[j]:
temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
for i in array:
print i
if __name__ == "__main__":
bubble_sort( )
插入排序算法的思路是每次将所选位置的数据插入到数组中该位置之前已排好序的数据之间,保证按顺序插入。python源码如下:
def insert_sort():
array = [3,1,4,2,5,7,6]
length = len(array)
for i in range(1,length):
key = array[i]
j = i-1
while array[j] > key and j >= 0:
array[j+1] = array[j]
j = j-1
array[j+1] =key
for i in array:
print i
if __name__ == "__main__":
insert_sort()
选择排序算法的思路是每次挑出最小(或最大)的数据放在数组头部,实现排序。pytho源码如下:
def select_sort():
array = [2,1,4,3,7,6,5,8]
length = len(array)
for i in range(length):
flag = i
for j in range(i+1,length):
if array[flag] > array[j]:
flag = j
if flag != i:
temp = array[i]
array[i] = array[flag]
array[flag] = temp
for i in array:
print i
if __name__ == "__main__":
select_sort()
完。
三种排序算法python源码——冒泡排序、插入排序、选择排序的更多相关文章
- JAVA排序算法(一)冒泡排序、选择排序
/* 冒泡排序 * * 相邻的元素,两两比较.如果第一个比第二个大,就交换他们两个. 大的后移 * 对每一对相邻元素做同样的工作,这样第一轮结束后,最大值在最后一个. */ public static ...
- android Service Activity三种交互方式(付源码)(转)
android Service Activity三种交互方式(付源码) Android应用服务器OSBeanthread android Service Binder交互通信实例 最下边有源代码: ...
- Java的三种代理模式&完整源码分析
Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCache缓存的实现机制](https://www.c ...
- 6种基础排序算法java源码+图文解析[面试宝典]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...
- 十大基础排序算法[java源码+动静双图解析+性能分析]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...
- spring学习笔记2---MVC处理器映射(handlerMapping)三种方式(附源码)
一.根据Beanname访问controller: 在springmmvc-servlet.xml的配置handlermapping中加入beanname,通过该beanname找到对应的contro ...
- android Service Activity三种交互方式(付源码)
android SDK提供了Service,用于类似Linix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Rem ...
- JavaScript中数组的两种排序方法详解(冒泡排序和选择排序)
一.冒泡排序的原理(从小到大) 相邻两个数进行比较,如果前一个数大于后一个数,那么就交换,否则不交换 原理剖析 比如有一组含有6个数字的数:5.3.7.2.1.6一共6个数字,做5次循环,每次循环相邻 ...
- java排序算法(二):直接选择排序
java排序算法(二) 直接选择排序 直接选择排序排序的基本操作就是每一趟从待排序的数据元素中选出最小的(或最大的)一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,它需要经过n- ...
随机推荐
- Python学习笔记——几种数据类型
1. 列表list: Python内置的一种数据类型是列表:list,用中括号[]表示.list是一种有序的集合,可以随时添加和删除其中的元素,而且元素的类型不必相同.list可以通过下标来访问,范围 ...
- Rsync和FastDFS
在做分布式文件存储的时候,常常用到两个工具,Rsync和FastDFS:这两者本质的区别在于前者的实时性相面相对较差,需要手工编写脚本同步,然后在放到定时任务(cron)中:FastDFS自动实现同组 ...
- SQL Express几个版本的区别
对于这三个文件:SQLEXPR32_x86_CHS.exe.SQLEXPR_x86_CHS.exe. SQLEXPR_x64_CHS.exe,大家一看就知道是sqlserver的express版本,但 ...
- bzoj 3328: PYXFIB 数论
3328: PYXFIB Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 130 Solved: 41[Submit][Status][Discuss ...
- ImageButton和Button区别
一.基础准备 Imagebutton 继承 Imageview,就是用一个图标代表了一些文字,它没Android:text属性.它由Android:src指定图标的位置 android:s ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- js template
http://garann.github.io/template-chooser/ http://www.gbin1.com/technology/javascript/20120917-javasc ...
- kernel 校验和实现
kernel 校验和实现 Kernel checksum implementation ) TCP包的错误检测使用16位累加和校验. 除了TCP包本身, TCP校验数据块还包括源IP地址,目的IP地址 ...
- ctagst简单应用,将Vim改造:Ctags,Taglist,Cscope,OmniCppComplete,SuperTab,Winmanager,NERDTree,MiniBufExplorer,vimrc
vim + ctags $ ctags #给同一个目录下的所有文件建立tags 这时在tags文件所在的目录下打开源文件阅读,vim就会自动调用tags文件.如果tags文件不在当前目录下,能在命令模 ...
- bzoj1202
很久以前写的,忘补解题报告了首先似乎dfs就可以了吧?但还有更高大上的做法其实这东西就是告诉sum[y]-sum[x-1]=z然后给出一堆看成不成立可以用并查集,维护每个点到father点的差即可 . ...