使用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. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  2. 【开发】Form Validate 表单验证 扩展应用

    目录: ★.文本输入框(easyui-textbox) ★.数字框(easyui-numberbox) ★.时间(easyui-datebox) ★.文本域(easyui-textbox easyui ...

  3. Git的安装以及注册账号等操作

    1.安装Git-2.5.1-64-bit.exe  一直下一步直至完成 2.注册github账号 官网地址:https://github.com/github 3.找到一个按钮“New Reposit ...

  4. TimesTen ODBC 链接库差异及相关命令行工具的使用注意事项

    1. TimesTen有两种访问模式:Direct模式和Client/Server模式,以下为来自Operations Guide 的描述 Connecting using TimesTen ODBC ...

  5. 几个app maker的网站

    简网APP工场:http://www.cutt.com/app 爱传iappk:http://www.iappk.com 安米网:http://www.appbyme.com/mobcentACA/i ...

  6. 最近用到的Linux常用命令总结

    最近用到的Linux常用命令总结 - ls :显示当前目录文件信息 `ls -a -l` - cd :目录跳转 cd .. 上级目录 cd ~ home目录 cd - 最近目录 - cat :在屏幕上 ...

  7. Control character in cookie value, consider BASE64 encoding your value , java操作cookie遇到中文会报错的解决方案

    项目当中用到cookie保存中文,但是会报如下错误: Control character in cookie value, consider BASE64 encoding your value 大概 ...

  8. Delphi新语法和ifthen的扩展联想

    Delphi之前已经重载了好多个ifthen函数 Math单元 ): Integer; overload; inline; ): Int64; overload; inline; ): UInt64; ...

  9. C# dynamic

    [TestMethod] public void DynamicTest() { dynamic Customer = new ExpandoObject(); Customer.Name = &qu ...

  10. [JavaScript] js获取Html元素的实际宽度高度

    第一种情况就是宽高都写在样式表里,就比如#div1{width:120px;}.这中情况通 过#div1.style.width拿不到宽度,而通过#div1.offsetWidth才可以获取到宽度. ...