使用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实现各种排序算法的更多相关文章
-
Python实现的选择排序算法原理与用法实例分析
Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...
-
一篇夯实一个知识点系列--python实现十大排序算法
写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...
-
Python实现一些常用排序算法
一些常用的排序 #系统内置排序算法#list.sort()#heapq模块 def sys_heap_sort(list): import heapq heap = [] for i in range ...
-
python 十大经典排序算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...
-
Python十大经典排序算法
现在很多的事情都可以用算法来解决,在编程上,算法有着很重要的地位,将算法用函数封装起来,使程序能更好的调用,不需要反复编写. Python十大经典算法: 一.插入排序 1.算法思想 从第二个元素开始和 ...
-
python实现经典的排序算法
排序 关注公众号"轻松学编程"了解更多. 1.冒泡排序 基本思想:比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上.原地排序, ...
-
C++/Python冒泡排序与选择排序算法详解
冒泡排序 冒泡排序算法又称交换排序算法,是从观察水中气泡变化构思而成,原理是从第一个元素开始比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡逐渐从水底逐渐冒升到水面一样. ...
-
python代码实现经典排序算法
排序算法在程序中有至关重要的作用, 不同算法的时间复杂度和空间复杂度都有所区别, 这影响着程序运行的效率和资源占用的情况, 经常对一些算法多加练习, 强化吸收, 可以提高对算法的理解, 进而运用到实践 ...
-
Python版常见的排序算法
学习笔记 排序算法 目录 学习笔记 排序算法 1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.归并排序 7.堆排序 排序分为两类,比较类排序和非比较类排序,比较类排序通过比较 ...
-
用Python实现几种排序算法
#coding=utf-8 # 1 快速排序算法 def qksort(list): if len(list)<=1: return list else: pivot = list[0] les ...
随机推荐
-
JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
前言:最近项目里面需要用到表格的冻结列功能,所谓“冻结列”,就是某些情况下表格的列比较多,需要固定前面的几列,后面的列滚动.遗憾的是,bootstrap table里自带的fixed column功能 ...
-
2016 - 1 - 27 javaScrip初步(一)
<head> </head> <body> <!-- The onclick attribute is the code that happens when ...
-
oracle模糊查询效率提高
1.使用两边加‘%’号的查询,oracle是不通过索引的,所以查询效率很低. 例如:select count(*) from lui_user_base t where t.user_name lik ...
-
杠杠做的全屏随鼠标滚动显示图片,类似于PPT效果
图片有22张,是一张张加载的,耐心点,鼠标一直尝试向下滚就行了. 图片来自<天空之境:乌尤尼盐沼>,一个好美好美的地方 引个流,欢迎去我的博客看看:http://blog.cxycs.co ...
-
用户输入密码隐藏之getpass的使用
有的时候,比如商城登录的时候,我希望输入的时候我的密码不为明文,如何实现呢? 这里就需要利用getpass模块中的getpass方法.注意,需要在linux上或者windows下运行,在pycharm ...
-
Windows 2008 R2下 如何简单使用IIS来配置PHP网站
虽然PHP网站配置一般大多数人可能会联想到用Apache+php+mysql来配置,但是呢,如果是为了安全性考虑或者是说是为了便捷高效快速的完成工作,那么Apache+php+mysql这个配置工作就 ...
-
统计dir_path下所有文件类型的文件数量
#!/bin/bash #!文件名为countfile.sh ]; then echo "Usage is $0 basepath"; exit fi path=$ declare ...
-
iOS.Info.plist
1. Custom message when asking for Address Book Permissions http://kevinyavno.com/blog/?p=176
-
Revit二次开发-根据视图阶段(Phase)创建房间
最近开发业务中,有一个自动创建房间的功能,很自然的想到了Document.NewRooms2方法.但是当前功能的特殊之处在于,Revit项目视图是分阶段(Phase)的,不同阶段的房间是互相独立的. ...
-
使用git和gitlab进行协同开发流程
一.基本概念 1.仓库(Repository) ①源仓库(线上版本库) 在项目的开始,项目的发起者构建起一个项目的最原始的仓库,称为origin. 源仓库的有两个作用: 1.汇总参与该项目的各个开发者 ...