python实现常见排序算法
#coding=utf-8
from collections import deque
#冒泡排序
def bubblesort(l):#复杂度平均O(n*2) 最优O(n) 最坏O(n*2)
for i in range(len(l)-1):
for j in range(len(l)-1-i):
if l[j]>l[j+1]:
temp=l[j]
l[j]=l[j+1]
l[j+1]=temp
return l
#选择排序
def Selectionsort(l):#O(n*2)
for i in range(len(l)-1):
min_temp=i
for j in range(i+1,len(l)):
if l[j]<l[min_temp]:
min_temp=j
if min_temp!=i:
t=l[i]
l[i]=l[min_temp]
l[min_temp]=l[t]
return l
#插入排序
def Insertionsort(l):#复杂度平均O(n*2) 最优O(n) 最坏O(n*2)
for i in range(1,len(l)):
get=l[i]
j=i-1
while j>=0 and l[j]>get:
l[j+1]=l[j]
j-=1
l[j+1]=get
return l
#二分插入排序
def binaryInsertionsort(l):#复杂度平均O(n*2) 最优O(nlogn) 最坏O(n*2)
for i in range(1,len(l)):
get=l[i]
left=0
right=i-1
while left<=right:
mid=(right+left)//2
if l[mid]>get:
right=mid-1
else:
left=mid+1
for j in range(i-1,left-1,-1):
l[j+1]=l[j]
l[left]=get
return l
#希尔排序(插入)
def shellsort(l):#h不同而不同
h=0
while h<=len(l):
h=h*3+1
while h>=1:
for i in range(h,len(l)):
j=i-h
get=l[i]
while j>=0 and l[j]>get:
l[j+h]=l[j]
j=j-h
l[j+h]=get
h=(h-1)//3
return l
#归并排序
def merge(a, b):#O(nlogn)
c = []
h = j = 0
while j < len(a) and h < len(b):
if a[j] < b[h]:
c.append(a[j])
j += 1
else:
c.append(b[h])
h += 1
if j == len(a):
for i in b[h:]:
c.append(i)
else:
for i in a[j:]:
c.append(i)
return c
def merge_sort(lists):
if len(lists) <= 1:
return lists
middle = len(lists)//2
left = merge_sort(lists[:middle])
right = merge_sort(lists[middle:])
return merge(left, right)
#堆排序
def swap(l,i,j):#O(nlogn)
l[i],l[j]=l[j],l[i]
return l
def heap_adjust(l,start,end):
temp=l[start]
i=start
j=i*2
while j<=end:
if j<end and l[j]<l[j+1]:
j+=1
if temp<l[j]:
l[i]=l[j]
i=j
j=i*2
else:
break
l[i]=temp
def heap_sort(l):
l_length=len(l)-1
first_sort_count=l_length//2
for i in range(first_sort_count):
heap_adjust(l,first_sort_count-i,l_length)
for i in range(l_length-1):
l=swap(l,1,l_length-i)
heap_adjust(l,1,l_length-1-i)
l=list(l)[1:]
return l
#快速排序
def quicksort(l,start,end):#复杂度平均O(nlogn) 最优O(nlogn) 最坏O(n*2)
if start<end:
i,j=start,end
base=l[i]
while i<j:
while i<j and l[j]>=base:
j-=1
l[i]=l[j]
while i<j and l[i]<=base:
i+=1
l[j]=l[i]
l[i]=base
quicksort(l,start,i-1)
quicksort(l,j+1,end)
return l
#计数排序
def count_sort(l):#O(n+k)
n=len(l)
k=100
count=[0]*k
target=[0]*k
for i in range(n):
count[l[i]]+=1
for i in range(1,k):
count[i]=count[i]+count[i-1]
for i in range(n-1,-1,-1):
count[l[i]]-=1
target[count[l[i]]]=l[i]
for i in range(n):
l[i]=target[i]
return l
python实现常见排序算法的更多相关文章
- python 的常见排序算法实现
python 的常见排序算法实现 参考以下链接:https://www.cnblogs.com/shiluoliming/p/6740585.html 算法(Algorithm)是指解题方案的准确而完 ...
- 用Python实现常见排序算法
最简单的排序有三种:插入排序,选择排序和冒泡排序.这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了.贴出来源代码. 插入排序: def insertion_sort( ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- python——常见排序算法解析
算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- JS常见排序算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
随机推荐
- 如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?
(注:本人用的pycharm开发工具) 1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增 ...
- word里面对齐用Tab键
1 Tab 组1 2 组2
- sips 命令(iMac 下系统自带)
2. sips 2.1 -Z 指定最大宽高 //等比例缩放 scaleFill $ sips -Z 300 hgl.png $ for i in *.jpg;do sips -Z 300 " ...
- Miller_Rabbin&&Pollard_Rho 学习笔记
占坑,待填 I Intro 首先我们考虑这样一个问题 给定一个正整数\(p(p<=1e8)\),请判断它是不是质数 妈妈我会试除法! 于是,我们枚举$ \sqrt p$ 以内的所有数,就可以非常 ...
- [SDOI2017]天才黑客
题目大意 给一张有向图,再给一颗字典树,有向图上的每条边有一个非负边权还有一个字典树上的字符串,从一条边到另一条边的代价是那条边的边权和这两个字符串的最长公共前缀,问从1到其他点的最短路. 题解 一看 ...
- centos7下使用docker安装gitlab
环境背景: Docker化已经成为一种热门,记录一下使用docker引擎安装gitlab的过程. 测试环境: 系统 软件 依赖 CentOS 7.4 GitLab(latest) docker-ce ...
- 树莓派中QT实现PWM
树莓派中QT实现PWM 在QT中实现 PWM 使用的驱动为 wiringPi 之前的博客中已经介绍了 wiringPi , BOARD 管脚, BCM 之间的关系 这次, 就介绍在 wiringPi ...
- Vue(小案例_vue+axios仿手机app)_购物车(二模拟淘宝购物车页面,点击加减做出相应变化)
一.前言 在上篇购物车中,如果用户刷新了当前的页面,底部导航中的数据又会恢复为原来的: 1.解决刷新,购物车上数值不变 ...
- 1.7分布式工具配置及安装(仅供学习Xshell,VMware)
前言 最近因为换工作以及其他的一些琐事,耽误了更博时间,再加上分布式的这几个软件之前没撸过....这学习这几个工具上也花了点时间 本篇博客为后续分布式的学习提供基础的安装和配置. 首先,系统为Cent ...
- http 400错误【原】
http 400错误现象: 使用java代码访问某PDF文件地址, 报了http 400错误 ,浏览器却能正常访问 . 所以猜测浏览器对地址做了额外处理. 异常代码 String srcUrl = & ...