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 算法描述: * ...
随机推荐
- Shodan的http.favicon.hash语法详解与使用技巧
在Shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法来搜索出使用了同一icon图标的网站,不知道怎么用的朋友请参考我上一篇文章. 通过上一 ...
- SOme USeful NOtes for MYself.
SOme USeful NOtes for MYself. B站神奇的频道(YouTube里同名):关于微积分/线代/梯度下降/DL等数学知识的理解,对理解DL很有帮助 https://space.b ...
- Error:Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2
可以换个maven库: allprojects { repositories { jcenter() //maven { url "https://jitpack.io" } ma ...
- scws安装
mkdir scws cd scws wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 tar xvjf scws-.tar.bz2 ...
- window.location.href 传参中文乱码问题!!!
不是所有地方都会用Ajax 当你使用window.location.href 来传中文参数的时候 如何避免乱码问题 js 是这样写的 下面代码中 方式 封装编码 参数 username ...
- LDM与STM指令详解
title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...
- 1.9 分布式协调服务-Zookeeper(二)
zoo.cfg配置文件分析 tickTime=2000 zookeeper中最小的时间单位长度 (ms) initLimit=10 follower节点启动后与leader节点完成数据同步的时间 ...
- react native navigationOptions中不能获取this
static navigationOptions = ({ navigation, navigationOptions,screenProps }) => { const { params } ...
- 新版本的Python问题
1.在print方面,新版本需要加括号,调用函数时也是如此,比如: import string s='the quick brown fox jumped to the lazy dog' print ...
- 【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数
Description 令 $(1+\sqrt 2)^n=e(n)+\sqrt 2\cdot f(n)$ ,其中 $e(n),f(n)$ 都是整数,显然有 $(1-\sqrt 2)^n=e(n)-\s ...