python常用代码总结-常见的排序算法的总结及python代码实现
冒泡排序
选择排序
直接插入排序
快速排序
堆排序
归并排序
希尔排序
总结
作业
一、冒泡排序
思路:n个数需要进行n-1趟排序,每一趟排序就是两个相邻的数组比较,交换位置。第i趟排序需要交换n-i-1次
代码:
#Author:Yueru Sun
def bubble_sort(data):
for i in range(0,len(data)-1):
for j in range(0,len(data)-i-1):
if data[j]>data[j+1]:
data[j],data[j+1]=data[j+1],data[j]
return data
print(bubble_sort([1,3,4,21,10]))
###################################################
#时间复杂度o(n*n)
优化的代码:(最好的情况:针对原来排序的序列本来就是有序的,时间复杂的变为0(n))
就是如果出现某一趟排序未交换位置,那么就可以直接break不进行下一趟排序了
def bubble_sort(data):
for i in range(0,len(data)-1):
flag=False#表示未交换
for j in range(0,len(data)-i-1):
if data[j]>data[j+1]:
data[j], data[j + 1] = data[j + 1], data[j]
flag=True
if flag=='False':
break
return data
print(bubble_sort([1,3,4,21,10]))
二、选择排序
原理:n个元素需要进行n-1趟排序,每一趟都会选出最小(大)的那个数组放到正确的位置,下一趟就遍历表中的剩下的元素,继续。。。
代码:
def select_sort(data):
for i in range(0,len(data)-1):
min_num=i#最小元素的下标,默认是每一趟的第一个数字
for j in range(i+1,len(data)):#每一趟需要在data[i+1]~data[len(data)-1]中找到最小(大)的那个数字的位置
if data[j]
min_num=j#把最小元素的下标修改未j
#for语句执行结束后就表示在这趟循环中找到了 在data[i+1]~data[len(data)-1]中找到最小(大)的那个数字 的位置
if min_num!=i:#如果最初假定的i不是
data[i],data[min_num]=data[min_num],data[i]
return data
print(select_sort([5,3,2,1,10]))
时间复杂度:o(n*n)
三、直接插入排序
原理:列表被分为有序区和无序区,默认最初的有序区是第一个元素。每次从无序区中选择一个元素,插入到有序区位空置,直到无序区变
代码:
def insert_sort(data):
for i in range(0,len(data)):
key=data[i]
j=i-1#有序序列的最后一个元素
while j>=0:#当有序序列不为空
if data[j]>key:
data[j+1]=data[j]#j之后的元素后移
data[j]=key#把key放到第j个位置
j=j-1#往前移动
return data
时间复杂度:o(n*n)
四、快速排序
原理:每一趟循环使得一个元素归位,同时列表被分成两部分,左边的都比归位元素小,右边的都比归位元素大
代码:
def quick_sort(data,left,right):
if left
#分割成两部分
mid=partion(data,left,right)
#递归实现
quick_sort(data,left,mid-1)
quick_sort(data,mid,right)
def partion(data,left,right):
temp=data[left]
while left
while left
right-=1
data[left]=data[right]
while left=data[left]:
left-=1
data[right]=data[left]
data[left]=temp#或者写data[right]=temp,因为此时left和right相遇了,相遇的位置就是temp存放的位置
return left
平均时间复杂度:o(n*logn)
最坏的情况:o(n*n)
五、堆排序
原理:
建立堆
得到堆顶元素,为最大元素
去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整重新使堆有序。
堆顶元素为第二大元素。
重复步骤3,直到堆变空。
可以参考:https://www.cnblogs.com/chengxiao/p/6129630.html
https://blog.csdn.net/sxhelijian/article/details/50295637
代码:
def heap_sort(data):
n=len(data)
for i in range(n//2-1,-1,-1):#建立堆,只需要调整堆中的父节点
sift(data,i,n-1)
for i in range(n-1,-1,-1):#从堆的最后一个元素开始调整
data[0],data[i]=data[i],data[0]
sift(data,0,i-1)
def sift(data,low,high):#low是需要调整的堆的堆顶序号,high是需要调整的堆的最后一个元素的序号
i=low
j=2*i+1
tmp=data[i]
while j<=high:
if j<=high and data[j]
j+=1
if tmp
data[i]=data[j]
i=j
j=2*i+1
else:
break
data[i]=tmp
时间复杂度:o(n*logn)
六、归并排序
原理:分治的思想。www.cnblogs.com/chengxiao/p/6194356.html
代码:
#归并
def merge(data,low,mid,high):
i=low
j=mid+1
ltmp=[]
while i
if data[i]
ltmp.append(data[i])
i+=1
else:
ltmp.append(data[j])
j+=1
while j<=mid:
ltmp.append(data[i])
i+=1
while j<=high:
ltmp.append(data[j])
j+=1
data[low:high+1]=ltmp
def mergesort(data,low,high):
if low
mid=(low+high)//2
mergesort(data,low,mid)
mergesort(data,mid+1,high)
merge(data,low,mid,high)
时间复杂度:O(nlogn)
空间复杂度:O(n)
七、希尔排序
原理:
希尔排序是一种分组插入排序算法。
首先取一个整数d1=n/2,将元素分为d1个组,每组相邻量元素之间距离为d1,在各组内进行直接插入排序;
取第二个整数d2=d1/2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。
希尔排序的最后一趟就是直接插入排序
代码:
#希尔排序
def sheel_sort(data):
gap=len(data)//2
while gap>0:
for i in range(gap,len(data)):
key=data[i]
j=i-gap
while j>=0:
if key
data[j+gap]=data[j]
data[j + gap] = key
j-=gap
gap/=2
时间复杂度:时间复杂度: O((1+τ)n)
python常用代码总结-常见的排序算法的总结及python代码实现相关推荐
- 搭建直播网站时使用 Python 实现几种常见的排序算法
排序是非常常见的算法,今天就来分享几种常见排序算法的 Python 实现 冒泡排序 冒泡排序是最为基础的排序算法,其核心思想就是相邻元素两两比较,把较大的元素放到后面,在一轮比较完成之后,最大的元素就 ...
- python常用算法有哪些_python常见的排序算法有哪些?
大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...
- python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...
最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...
- 排序算法基本介绍及python实现(含详细注释)
对数组排序可以说是编程基础中的基础,本文对八种排序方法做简要介绍并用python实现. 代码中注释很全,适合复习和萌新学习.这是刚入学自己写的,可能难免比不上标准的写法,但是懒得改了. 文末会放和排序 ...
- 十大经典排序算法详细总结 图形展示 代码示例
文章目录 十大经典排序算法详细总结 0.排序算法说明 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序( ...
- 七种常见的排序算法总结
目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...
- 基于比较的常见的排序算法
目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...
- 常见的排序算法与MSQL
常见的排序算法 1.常见的排序算法 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. (1)冒泡排序法:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现 ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
最新文章
- exec不同文件l怎么汇总_ABAQUS常见问题汇总 - 2.0版.doc
- Eigen矩阵运算的混淆问题
- 安装windows系统时遇到的大坑——鼠标键盘没反应
- 网络故障排除工具 | 快速定位网络故障
- 用户行为数据分析的道、法、术、器、势
- springmvc整合hibernate-validator
- html访问java接口出现缓存_一个牛逼的多级缓存实现方案
- How does UDO tool resolve objects
- linux把2块盘挂到一个分区,linux系统如何挂载第二块硬盘
- React开发(149):二位数组的使用
- 美团笔试题——正则序列
- .Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView
- Java常用框架面试题
- 【论文撰写和程序员常用软件】
- “DOU出晋采”山西旅游数据发布会在太原举行,山西文旅牵手巨量引擎!
- 【光学】基于矩阵法和等效界面法分析光学薄膜膜对反射率影响附matlab代码
- 使用 SendARP 获取 MAC 地址
- EXCEL表格内部换行
- ROS——roscpp
- 2021年“东数西算”大背景下我国IDC产业发展现状与前景展望分析「图」