使用Python实现直接插入排序、希尔排序、简单选择排序、冒泡排序、快速排序、归并排序、基数排序。

#! /usr/bin/env python
# DataStructure Sort # InsertSort
def InsertSort(lst, end=None, beg=0, space=1):
if end is None:
end = len(lst)
for i in range(beg, end, space):
tmp = lst[i]
j = i-space
while j>=beg and tmp < lst[j]:
lst[j+space] = lst[j]
j -= space
lst[j+space] = tmp # ShellSort
def ShellSort(lst):
spaces = [5,3,1]
# 5->3->1
for space in spaces:
for i in range(space):
InsertSort(lst, len(lst), i, space)
# print lst # BubbleSort
def BubbleSort(lst):
for i in range(len(lst)-1, 0, -1):
flag = 0
for j in range(1, i+1):
if lst[j-1] > lst[j]:
tmp = lst[j-1]
lst[j-1] = lst[j]
lst[j] = tmp
flag = 1
if flag == 0:
return # QuickSort
def QuickSort(lst, l, r):
i=l
j=r
if l<r:
tmp = lst[l]
while i!=j :
while j>i and lst[j]>tmp:
j -= 1
if i<j:
lst[i] = lst[j]
i += 1 while i<j and lst[i]<tmp:
i += 1
if i<j:
lst[j] = lst[i]
j -= 1
lst[i] = tmp
QuickSort(lst, l, i-1)
QuickSort(lst, i+1, r) def QSort(lst):
QuickSort(lst, 0, len(lst)-1) # SelectSort
def SelectSort(lst):
for i in range(len(lst)):
k = i
for j in range(i+1, len(lst)):
if lst[j] < lst[k]:
k = j
tmp = lst[k]
lst[k] = lst[i]
lst[i] = tmp # MergeSort
def MergeSort(lst):
i = 2
length = len(lst)
while i<length:
tmp = length
j = 0
while tmp:
n = i
if tmp < i:
n = tmp
tmp = 0
else:
tmp -= n
# Pay attention to j+n, j+n is end.
InsertSort(lst, j+n, j)
j += i
i = i << 1
# print lst
InsertSort(lst, length) # BaseSort
def BaseSort(lst):
maxnum = max(lst)
mod = 1
barrel = [[] for i in range(10)] # [[]] * 10 not work
while mod <= maxnum:
mod *= 10
length = len(lst)
for i in range(length):
index = lst[0] % mod
index = index*10 // mod
barrel[index].append(lst.pop(0))
for i in range(10):
length = len(barrel[i])
for j in range(length):
lst.append(barrel[i].pop(0))
# print lst if __name__ == "__main__":
nums = [49, 38, 65, 97, 76, 13, 27, 49, 55, 4]
# InsertSort(nums)
# BubbleSort(nums)
# QSort(nums)
# SelectSort(nums)
# ShellSort(nums)
# MergeSort(nums)
BaseSort(nums)
print nums

【DataStructure In Python】Python实现各种排序算法的更多相关文章

  1. Python实现的选择排序算法原理与用法实例分析

    Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...

  2. 一篇夯实一个知识点系列--python实现十大排序算法

    写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...

  3. Python实现一些常用排序算法

    一些常用的排序 #系统内置排序算法#list.sort()#heapq模块 def sys_heap_sort(list): import heapq heap = [] for i in range ...

  4. python 十大经典排序算法

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...

  5. Python十大经典排序算法

    现在很多的事情都可以用算法来解决,在编程上,算法有着很重要的地位,将算法用函数封装起来,使程序能更好的调用,不需要反复编写. Python十大经典算法: 一.插入排序 1.算法思想 从第二个元素开始和 ...

  6. python实现经典的排序算法

    排序 关注公众号"轻松学编程"了解更多. 1.冒泡排序 基本思想:比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上.原地排序, ...

  7. C++/Python冒泡排序与选择排序算法详解

    冒泡排序 冒泡排序算法又称交换排序算法,是从观察水中气泡变化构思而成,原理是从第一个元素开始比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡逐渐从水底逐渐冒升到水面一样. ...

  8. python代码实现经典排序算法

    排序算法在程序中有至关重要的作用, 不同算法的时间复杂度和空间复杂度都有所区别, 这影响着程序运行的效率和资源占用的情况, 经常对一些算法多加练习, 强化吸收, 可以提高对算法的理解, 进而运用到实践 ...

  9. Python版常见的排序算法

    学习笔记 排序算法 目录 学习笔记 排序算法 1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.归并排序 7.堆排序 排序分为两类,比较类排序和非比较类排序,比较类排序通过比较 ...

  10. 用Python实现几种排序算法

    #coding=utf-8 # 1 快速排序算法 def qksort(list): if len(list)<=1: return list else: pivot = list[0] les ...

随机推荐

  1. JDOM方法实现对XML文件的解析

    首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...

  2. Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

    转载请务必注明出处(all copyright reserved by iOSGeek) 本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina ...

  3. DOM4j--write

    import java.io.File; import java.io.FileNotFoundException;import java.io.FileOutputStream;import jav ...

  4. RX学习笔记:正则表达式

    正则表达式 2016-07-03 正则表达式是以字符串模板的形式匹配查找字符的方式. 正则表达式是字符串模板,所以其本身是一个字符串,首尾以反斜杆 / 开始和结束. 在两反斜杆中间的字符串表示要查找的 ...

  5. Struts2 Annotation 默认返回Tiles2布局

    Struts2的annotation方式很简约,特别实在遵从默认约定的时候就根本不需要配什么struts.xml.网上关于Annotation约定大于配置的教程也很多,其中也不乏将xml版struts ...

  6. linux 客户端与linux服务器端连接与文件上传下载

    linux客户端连接linux服务器 用ssh 可以用 man ssh 查看用法 基本格式: ssh 用户名@主机名 如: ssh root@1.1.1.1 linux客户端上传文件到 linux 服 ...

  7. html5在手机端关于 map area中的自适应

    https://github.com/stowball/jQuery-rwdImageMaps用这一个插件可自适应!!!

  8. C#调用金数据API

    首先,吐槽一下金数据的API文档 http://help.jinshuju.net/articles/api-intro.html写的很粗糙啊...反正我是没太看明白 拿表单api举例,只告诉你了个地 ...

  9. Django数据操作

    1.一个模型类代表数据库中的一个表,一个模型类的实例代表这个数据库表中的一条特定的记录. 2.管理器和查询集. 查询集QuerySet表示从数据库中取出来的对象的集合.它可以含有零个.一个或者多个过滤 ...

  10. c++sort函数的用法浅析

    (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于 ...