python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...
其实本文叫排序算法总结有点过了,只是用python实现了一遍。本文都是参照一篇csdn博客《数据结构排序算法》,里面详细介绍每种排序算法的原理,并给出了C++的实现,再次膜拜。
# -*- coding: gb2312 -*-
# 交换两个数
def swap(a, b):
return b, a
# 冒泡排序
# 进行两次嵌套排序
# 每一次排序将最大或最小移到最右端
# 下次排序排序 Length+1-i
class Sort(object):
def __init__(self, list):
self.list = list
def bubbleSort(self, btype=True):
l = self.list[:]
if not self.list:
return l;
length = len(l)
for i in range(0, length-1):
print_flag = False
for j in range(0, length-i-1):
if btype: # 升序
if l[j] > l[j+1]:
print_flag = True
l[j], l[j+1] = swap(l[j], l[j+1])
else: # 降序
if l[j] < l[j+1]:
print_flag = True
l[j], l[j+1] = swap(l[j], l[j+1])
if print_flag: print '一趟冒泡排序后: ',l
print l
def bubbleSort2(self, btype=True):
l = self.list[:]
if not self.list:
return l;
length = len(l)
for i in range(length-1,0, -1):
for j in range(0, i):
if btype: # 升序
if l[j] > l[j+1]:
l[j], l[j+1] = swap(l[j], l[j+1])
else: # 降序
if l[j] < l[j+1]:
l[j], l[j+1] = swap(l[j], l[j+1])
print l
# 直接插入排序
# 在一个已经有序的数据序列插入一个数,使插入数据后序列仍然有序
# 首先,将第0个元素视为一个已经排好序的序列
# 从1到length-1依次进行直接插入操作
# 每次插入,以之前排好序的序列为基础,如序列为[0:i-1]
# 找合适的位置插入第i个元素
# 循环以上步骤直到循环结束
def insertSort(self, btype=True):
l = self.list[:]
if not self.list:
return l
length = len(l)
for i in range(1, length):
print_flag = False
for j in range(i, 0, -1):
if btype:
if l[j] < l[j-1]:
print_flag = True
l[j-1], l[j] = swap(l[j-1], l[j])
else:
break
else:
if l[j] > l[j-1]:
print_flag = True
l[j-1], l[j] = swap(l[j-1], l[j])
else:
break
if print_flag: print '一趟插入排序后: ', l
print l
# 希尔排序
# 希尔排序(Shell Sort)是插入排序的一种。
# 是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
# 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。
# 先在各组内进行直接插入排序;然后,取第二个增量d2
# 直至所取的增量dt=1(dt
def shellSort(self, btype=True):
l = self.list[:]
if not self.list:
return l
n = len(l)
gap = n/2
while gap > 0:
print_flag = False
for i in range(gap, n):
j = i
while j>=gap:
if btype:
if l[j] < l[j-gap]:
print_flag = True
l[j], l[j-gap] = swap(l[j], l[j-gap])
else:
break
else:
if l[j] > l[j-gap]:
print_flag = True
l[j], l[j-gap] = swap(l[j], l[j-gap])
else:
break
j -= gap
print '一趟希尔排序后(gap=%d): ' %gap, l
gap /= 2
print l
结果:
python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...相关推荐
- php二分法 冒泡 快速排序,PHP 常见算法【冒泡排序, 快速排序, 插入排序, 取舍排序, 二分法查找, .】...
PHP 常见算法[冒泡排序, 快速排序, 插入排序, 选择排序, 二分法查找, ..] // 冒泡排序 function bubblesort($arr) { for($i=0,$j=count($a ...
- cb32a_c++_STL_算法_查找算法_(5)adjacent_find
cb32a_c++_STL_算法_查找算法_(5)adjacent_find adjacent_find(b,e),b,begin(),e,end() adjacent_find(b,e,p),p-p ...
- 常用十大算法_回溯算法
回溯算法 回溯算法已经在前面详细的分析过了,详见猛击此处. 简单的讲: 回溯算法是一种局部暴力的枚举算法 循环中,若条件满足,进入递归,开启下一次流程,若条件不满足,就不进行递归,转而进行上一次流程. ...
- 【排序综合】直接插入排序,希尔排序,快速排序,堆排序,冒泡排序,简单选择排序的简介,实现和算法复杂度分析
目录 1. 直接插入排序 1.1 直接插入排序简介 1. 什么是直接插入排序 2. 排序思想 1.2 排序实现 1. 排序代码 2. 复杂度分析: 3. 运行结果: 1.3 学习链接 2. 希尔排序( ...
- java shell排序算法_【算法】8种排序算法(Java)
排序算法 上一篇博客中写到了关于动态规划中一些常见的问题和解决方案,根据问题总结出来解决动态规划类问题的方法是通过寻找状态,列出状态转移方程,通过遍历即可将问题解决.排序也是一类常见的问题,通过排序的 ...
- 9个元素换6次达到排序序列_(算法四)高级排序(快速排序)
1.快速排序 快速排序是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速 ...
- 合并排序算法排序过程_基本算法:合并排序
合并排序算法排序过程 每个程序员都需要了解他们的算法和数据结构. 在研究它们时,您需要确保确切了解它的功能,时间和空间的复杂性以及采用这种方式的原因,并且不仅能够对其进行编码,而且能够手动执行. 这就 ...
- 木桶排序算法_这才是你想要桶排序
前面说的 昨天发的桶排序文章,有同学回复,确实有比较精明的同学,文章就是想提出一个比较简单的思路,本来想给自己的排序方式写个名字叫做"木桶排序",这篇文章讲解真正的桶排序,结合前面 ...
- python序列模式的关联算法_关联算法
以下内容来自刘建平Pinard-博客园的学习笔记,总结如下: 1 Apriori算法原理总结 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合 ...
- python实现快速排序算法_基础算法:快速排序(python实现)
算法原理 快速排序是一个具有较高性能的排序算法,其主要思想如下: 对数组中的某个元素,确定其在数组中的排序位置,即在其之前的所有元素均小于该元素,在其之后的均大于该元素.对小元素组和大元素组同样执行该 ...
最新文章
- 你可能已经知道或者不知道的ASP.NET 2.0技巧(转载)
- C# 文本输入限制类型,datagridview单元格输入验证
- python是一门什么课程-为什么一定要让孩子学会一门编程语言?
- UA OPTI501 电磁波 经典电动力学中的Fourier方法基础
- [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式
- Github标星3.7k:微软出的数据科学入门课程(附下载)
- ITK:向索引添加偏移量
- MySQL的基本语法
- Mac下Virtual Box Host-Only网络配置
- hdu 1576 A/B
- 48 MM配置-库存管理和实际库存-工厂参数
- OpenCV 4.0 rc版本发布,扩展计算图Graph API
- 用40年前的电脑打开女神图片,这你敢信?
- ×××全功能邮件系统(3)
- 基金指数温度怎么算_温度换算(指数基金温度计算器)
- Shell脚本调用阿里云API实现DDNS动态域名解析
- 使用STM32CubeMX和SW4STM32在Nucleo-F401RE开发板轻松实现Blinky闪烁 [
- 定点补码加减法运算_定点加减法运算与溢出判断处理
- day 55 定位流(相对,绝对,固定)
- Firefox火狐浏览器如何本地备份导入、导出密码