使用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. 40个Java集合面试问题和答案【中】【转载】

    接上文:http://www.cnblogs.com/xujianbo/p/5148075.html   16.UnsupportedOperationException是什么? Unsupporte ...

  2. OC班级类

    // // MyClass.h // OC2_班级类 // // Created by zhangxueming on 15/6/12. // Copyright (c) 2015年 zhangxue ...

  3. 14_Request对象

    [HttpServletRequest简介] HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过 ...

  4. html5绘制折线图

    html5绘制折线图详细代码 <html> <canvas id="a_canvas" width="1000" height="7 ...

  5. JQ方法大全

    Dom:Attribute:$("p").addClass(css中定义的样式类型); 给某个元素添加样式$("img").attr({src:"te ...

  6. 51nod1242 斐波那契数列 矩阵快速幂

    1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 #include<stdio.h> #define mod 100000000 ...

  7. android通过泛型获取控件或视图

    @SuppressWarnings("unchecked") public <T extends Fragment> T getFragment(int id) { T ...

  8. #Leet Code# Unique Path(todo)

    描述: 使用了递归,有些计算是重复的,用了额外的空间,Version 1是m*n Bonus:一共走了m+n步,例如 m = 2, n = 3 [#, @, @, #, @],所以抽象成数学问题,解是 ...

  9. 微信支付JS API使用心得

    微信的接口真的很坑爹,只返回成功或失败,从来不会告诉你为什么失败.这个微信支付的js接口也是调了一个下午才成功,期间踩了不少坑,在这里总结一下,而且把支付接口封装成了一个js文件,这样以后调用就很方便 ...

  10. 八,WPF 命令

    WPF命令模型 ICommand接口 WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理,它包含了两个方法和一个事件: public in ...