1.参考

一本关于排序算法的 GitBook 在线书籍 《十大经典排序算法》,使用 JavaScript & Python & Go 实现

2.冒泡排序:两两比较,互换位置

arr = [9,8,2,23,3]

# 冒泡排序 两两比较,互换位置
# 3 5 9 1 8
# A B C D E
# 3 5 9 1 8
# 3 5 9 1 8
# 3 5 1 9 8
# 3 5 1 8 9
# 第一轮比较将最大数排到最后,5个数总共需要4轮即1,2,3,4
# 比较是arr[j] > arr[j+1],第一轮j取前4个数即range(4)即可,第二轮j取前3个数range(3)即可
# 5个数总共比较 4 3 2 1 = 10次 def bubble_sort(arr):
print 'bubble_sort:',arr
count = 0
for i in range(1, len(arr)):
for j in range(len(arr)-i):
count += 1
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
print 'bubble_sorted:', count, arr
bubble_sort([9,8,2,23,3])
# bubble_sort([int(i) for i in raw_input(':').split()])

2.选择排序:找出极值,换到队头

# 3 5 9 1 8
# A B C D E def select_sort(arr):
count = 0
for i in range(len(arr)-1): #总共需要4次min or max
arr_min = min(arr[i:]) #取出的数放在列首更容易处理
arr.remove(arr_min)
arr.insert(i, arr_min) #注意插入位置更新
print arr
# select_sort(arr[:]) # 五个数字需要4轮
# 0位和1,2,3,4比较,小的马上换到0位
# 1位和2,3,4比较,小的马上换到1位 def select_sort1(arr):
count = 0
for i in range(len(arr)-1):
for j in range(i+1, len(arr)):
count += 1
if arr[i] > arr[j]: #注意arr[i]一直被更新
arr[i], arr[j] = arr[j], arr[i]
print count
print arr
# select_sort1(arr[:]) def select_sort2(arr):
print 'select_sort2:',arr
count = 0
for i in range(len(arr)-1):
min_index = i
for j in range(i+1, len(arr)):
count += 1
if arr[min_index] > arr[j]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i] #一轮之后再更新 arr[i]
print 'select_sort2ed:', count, arr
select_sort2([9,8,2,23,3])

3.插入排序:打牌,已排+未排,逐个插入(折半优化)

# 3 5 9 1 8
# A B C D E
#A已排序,BCDE未排序
#AB已排序,CDE未排序
def insert_sort(arr):
print 'insert_sort:',arr
count = 0
for i in range(1, len(arr)): #操作数是B
for j in range(0,i): #操作数是A
count += 1
print 'B', arr[i], 'A', arr[j], arr
if arr[i] < arr[j]:
arr.insert(j, arr[i])
arr.pop(i+1) #先插入,导致原来要移除的位置推后1位
print arr
break
print 'insert_sorted:', count, arr insert_sort([9,8,2,23,3])

python排序算法之冒泡,选择,插入的更多相关文章

  1. 44.python排序算法(冒泡+选择)

    一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...

  2. python 中的一些基础算法:递归/冒泡/选择/插入

    递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...

  3. python排序算法实现(冒泡、选择、插入)

    python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...

  4. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  5. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)

    算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...

  6. javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

    javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...

  7. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  8. Shell数组以及排序算法(冒泡、直接选择、反转)

    Shell数组以及排序算法(冒泡.直接选择.反转) 目录 Shell数组以及排序算法(冒泡.直接选择.反转) 一.数组概述 1. 数组的定义 2. 下标的定义 3. 数组的特点 4. 数组定义的方法 ...

  9. python 排序算法总结及实例详解

    python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...

随机推荐

  1. 【转】Java HashMap的死循环

    问题的症状 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现 ...

  2. Tour HDU - 3488 有向环最小权值覆盖 费用流

    http://acm.hdu.edu.cn/showproblem.php?pid=3488 给一个无源汇的,带有边权的有向图 让你找出一个最小的哈密顿回路 可以用KM算法写,但是费用流也行 思路 1 ...

  3. codeforces411div.2

    每日CF: 411div2 Solved A CodeForces 805A Fake NP Solved B CodeForces 805B 3-palindrome Solved C CodeFo ...

  4. 外网zabbix-server使用主动模式监控公司内网windows服务器

    外网zabbix-server使用主动模式监控公司内网windows服务器 1.Zabbix Agent active批量调整客户端为主动模式监控将Template OS Windows模板调整为主动 ...

  5. Mysql 通过frm&ibd 恢复数据

    mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好备份,数据被误删除 ...

  6. 【原创】Java基础之简单修改jar包中的class

    有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 # cd lib # ls test.jar ...

  7. 1)requests模块

    一:requests 介绍 requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装, 从而使得Pyt ...

  8. Python-递归、三元表达式列表生成式等

    一.函数递归 1.什么是函数递归:函数的递归调用是函数嵌套的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用 2.递归调用必须明确的两个阶段: 1.回溯:一次次 ...

  9. 彻底完全卸载 SQL Server 2005 的图文教程

    彻底完全卸载 SQL Server 2005 的图文教程 SQL SERVER 2005不象SERVER 2000所有组件都汇总在一起,所以卸载时特别麻烦,如果不按正常的方法卸载,重新安装是不可能安装 ...

  10. Confluence 6 为搜索引擎隐藏外部链接

    为搜索引擎隐藏外部链接能够避免向你的站点添加垃圾信息.如果你启用了这个选项的话,任何插入到页面中的 URLs 和评论将会赋予 'nofollow' 属性,这个属性将会禁止搜索引擎进行索引.  快捷链接 ...