【DataStructure In Python】Python实现各种排序算法
使用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 ...
随机推荐
- 使用SQL Server 2005 新的语法ROW_NUMBER()进行分页的两种不同方式的性能比较
相比在SQL Server 2000 中使用的分页方式,在SQL Server 2005中使用新的语法ROW_NUMBER()来分页效率要高出很多,但是很多人在使用ROW_NUMBER()这种分页方式 ...
- IO流07_输入输出流总体系
[javaIO体系中常用的流] [关于字符流和字节流的注意点] 通常,字节流比字符流功能更加强大,因为字节流可以处理所有的二进制文件. 但是字节流来处理字符,又需要将字节转换成字符,增加了编程复杂度. ...
- QT5新手上路(2)发布exe文件
QT编程教程在网上有很多,但写完代码以后如何打包成可执行exe文件却少有提及,本文主要介绍这一部分:1.首先确认自己建的工程在debug模式下运行无误.2.在release模式下运行一遍.(如何更改成 ...
- [leetcode] 400. Nth Digit
https://leetcode.com/contest/5/problems/nth-digit/ 刚开始看不懂题意,后来才理解是这个序列连起来的,看一下第几位是几.然后就是数,1位数几个,2位数几 ...
- (poj)3268 Silver Cow Party 最短路
Description One cow ≤ N ≤ ) conveniently numbered ..N ≤ X ≤ N). A total of M ( ≤ M ≤ ,) unidirection ...
- InstallShield: Component-Feature Associations
Quote from: http://helpnet.installshield.com/installshield16helplib/IHelpFeatAssociateComponents.htm ...
- Wooden Sticks
Wooden Sticks Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total ...
- I/O继承关系图
InputStream/OutputStream继承关系图
- Linux 系统结构详解
Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...
- jQuery 选择器(转)
jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元 ...