三种排序算法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- ...
随机推荐
- ObjectCopy
对象的传参用的是传引用,但开发中通常不允许对传入参数进行修改.因此对象拷贝很常用,Python提供一个很方便的对象拷贝方法 如代码: __author__ = 'mengxuan' import co ...
- Python 命令行参数解析
方法1: Python有一个类可以专门处理命令行参数,先看代码: #!/usr/bin/env python # encoding: utf-8 from optparse import Option ...
- PCB设计之原理图绘制笔记
02原理图工作环境设置原理图画布由画布和边界(Border)构成.可以通过DocumentOptions设置(快捷键DO).DocumentOptions设置--------------------- ...
- asp.net学习资源汇总
名称:快速入门地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序 ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)状态报告 打印 report.c
/* Routines for storing population data into files */ # include <stdio.h> # include <stdlib ...
- BZOJ 1828: [Usaco2010 Mar]balloc 农场分配
Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i ...
- uva 1449 - Dominating Patterns
简单的AC自动机: #include<cstdio> #include<cstring> #include<queue> #define maxn 150005 u ...
- 【poj3070】矩阵乘法求斐波那契数列
[题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...
- 如何解决C#编译中"csc不是内部或外部命令"的问题
安装完 VisualStudio 2010编译环境后,是不能用命令行直接编译写好的csc文件的,如果不配置环境变量,在命令提示符(cmd)中编译扩展名为cs的文件,会出现错误提示“csc不是内部或外部 ...
- [转贴]怎样在LINQ实现 LEFT JOIN 或者RIGHT JOIN
In this post let us see how we can handle Left Join and Right Join when using LINQ. There are no key ...