插入排序和希尔排序
2016-03-24 10:21
309 查看
对n个元素的数组排序,假设已经排好了前n-1个,一般来说,我们可以从右到左扫描这个有序的子数组,直到遇到第一个小于等于第n个元素的元素,然后把第n个元素插在该元素的后面。这种算法被称为直接插入排序,显然基于递归思想,但从底至上地实现这个算法,也就是使用迭代效率会更高。 stable
希尔排序是插入排序的一种扩展算法,以发明者(D.L.Shell)的名字命名,此排序方法提供了一种更好的算法来对较大的文件进行排序。它对给定的序列的若干步长子序列分别应用插入排序。对序列的每一遍操作,都根据一些事先定义好的递减步长队列 h1>h2>…>1来构造所要求的子序列。not stable
附:检验程序性能
# insertion sort def sort1(A): n=len(A) for i in range(1,n): v=A[i] j=i-1 while j>=0 and A[j]>v : A[j+1]=A[j] j=j-1 A[j+1]=v return A def sort2(A): n=len(A) for i in range(1,n): j=i-1 while j>=0 and A[j]>A[j+1] : A[j],A[j+1]=A[j+1],A[j] j=j-1 return A
希尔排序是插入排序的一种扩展算法,以发明者(D.L.Shell)的名字命名,此排序方法提供了一种更好的算法来对较大的文件进行排序。它对给定的序列的若干步长子序列分别应用插入排序。对序列的每一遍操作,都根据一些事先定义好的递减步长队列 h1>h2>…>1来构造所要求的子序列。not stable
# -*- coding: utf-8 -*- #shell sort step size 1,4,13,40,121,... #4=1+3^1,13=4+3^2,40=13+3^3,121=40+3^4,... #setpsize=[1,4,13,40,121,] def sort(A): n=len(A) ss=stepsize(n) for k in range(len(ss)): step=ss[len(ss)-k-1] for m in range(0,step): for i in range(1,n/step+1): j=(i-1)*step+m while j>=0 and j+step < n and A[j]>A[j+step] : A[j],A[j+step]=A[j+step],A[j] j=j-step return A def stepsize(n): ss=[] ss.append(1) i=1 while ss[i-1]+3**i < n : ss.append(ss[i-1]+3**i) i=i+1 return ss
附:检验程序性能
import random import cProfile import selectionsort import bubblesort import insertionsort import shellsort list1=range(10000) random.seed(111< 4000 /span>) random.shuffle(list1) cProfile.run('selectionsort.sort(list1)') list1=range(10000) random.seed(111) random.shuffle(list1) cProfile.run('bubblesort.sort(list1)') list1=range(10000) random.seed(111) random.shuffle(list1) cProfile.run('insertionsort.sort1(list1)') list1=range(10000) random.seed(111) random.shuffle(list1) cProfile.run('shellsort.sort(list1)')
相关文章推荐
- 控制反转理解,一个简单例子
- 响应式编程的概念
- 3月22日全球域名商解析新增量:万网居亚 排名升1位
- Mysql 查看连接数,状态
- 用 xib / Storyboard 创建 UITableView 的 header 和 footer
- js中== ===的区别
- 移动端适配简易步骤
- 状态类和混合类(思想)(转载)
- 每天一个linux命令(1):which命令
- Linux网络属性配置
- Hibernate框架数据分页技术实例分析
- ClassCastException
- html dom教程
- 马云亲爹竟然是..99%的人不知道!
- 221. Maximal Square | Java最短代码实现
- jquery相关注意点
- blcok,sel学习小结
- 滚动公告,永远只显示一条
- iOS性能优化:Instruments使用实战
- angular 结合 nodejs连接数据库在webstorm服务器中启动