#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实现常见排序算法的更多相关文章

  1. python 的常见排序算法实现

    python 的常见排序算法实现 参考以下链接:https://www.cnblogs.com/shiluoliming/p/6740585.html 算法(Algorithm)是指解题方案的准确而完 ...

  2. 用Python实现常见排序算法

    最简单的排序有三种:插入排序,选择排序和冒泡排序.这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了.贴出来源代码. 插入排序: def insertion_sort( ...

  3. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  4. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

  5. python——常见排序算法解析

    算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...

  6. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  7. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  8. JS常见排序算法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. JavaScript版几种常见排序算法

    今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...

随机推荐

  1. C#语法相比其它语言比较独特的地方

    C#语法相比其它语言比较独特的地方(一) 本文讲解了switch语句可以用来测试string型的对象.多维数组.foreach语句.索引器和Property等内容 1,switch语句可以用来测试st ...

  2. Monte Carlo Method(蒙特·卡罗方法)

    0-故事: 蒙特卡罗方法是计算模拟的基础,其名字来源于世界著名的赌城——摩纳哥的蒙特卡罗. 蒙特卡罗一词来源于意大利语,是为了纪念王子摩纳哥查理三世.蒙特卡罗(MonteCarlo)虽然是个赌城,但很 ...

  3. macTypeError: slice indices must be integers or None or have an index method

    一般是由于Numpy的版本太高了(1.12对此进行了调整),有的时候传入numpy array里面的索引可能是浮点数,这个时候最好检查一下索引强制转换为int类型 或者安装低版本的numpy sudo ...

  4. CSS中的BFC

    CSS当中BFC介绍 在前端当中,我们都知道标准文档流,我们在开发的时候,经常会碰到block和inline.而下文要说到的BFC就是对块级盒子的格式化.当然block级别的盒子是BFC,那么inli ...

  5. [powershell]获取FCID&Port

    Get-InitiatorID Get-InitiatorPort

  6. ElasticSearch常用操作命令

    查看系统信息: curl 'http://username:password@192.168.0.40:9200/' curl 'http://username:password@127.0.0.1: ...

  7. ML笔记-sklearn.classification_report

    主要用于显示主要分类指标的文本报告,在报告中显示每个类的精确度.召回率.F1等信息 首先数据测试结果分为以下4种情况: TP:预测为正,实现为正 FP:预测为正,实现为负 FN:预测为负,实现为正 T ...

  8. luogu5283 异或粽子

    题目链接 思路 首先求个前缀异或和,这样就可以\(O(1)\)的得到区间异或和了. 然后发现问题转化为 找出不同的\(k\)个二元组\(x,y\).使得\(a_x \otimes a_y\)的和最大. ...

  9. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

  10. atool-build 打包项目报JavaScript heap out of memory 错误

    出现这个问题的原因,是因为NodeJS给JavaScript设置了默认内存使用限制(32位系统下0.7GB,64位系统下1.4GB),就算我们的电脑内存是64GB的,在使用atool-build打包时 ...