冒泡排序

选择排序

直接插入排序

快速排序

堆排序

归并排序

希尔排序

总结

作业

一、冒泡排序

思路: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代码实现相关推荐

  1. 搭建直播网站时使用 Python 实现几种常见的排序算法

    排序是非常常见的算法,今天就来分享几种常见排序算法的 Python 实现 冒泡排序 冒泡排序是最为基础的排序算法,其核心思想就是相邻元素两两比较,把较大的元素放到后面,在一轮比较完成之后,最大的元素就 ...

  2. python常用算法有哪些_python常见的排序算法有哪些?

    大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...

  3. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...

    最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...

  4. 排序算法基本介绍及python实现(含详细注释)

    对数组排序可以说是编程基础中的基础,本文对八种排序方法做简要介绍并用python实现. 代码中注释很全,适合复习和萌新学习.这是刚入学自己写的,可能难免比不上标准的写法,但是懒得改了. 文末会放和排序 ...

  5. 十大经典排序算法详细总结 图形展示 代码示例

    文章目录 十大经典排序算法详细总结 0.排序算法说明 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序( ...

  6. 七种常见的排序算法总结

    目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...

  7. 基于比较的常见的排序算法

    目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...

  8. 常见的排序算法与MSQL

    常见的排序算法 1.常见的排序算法 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. (1)冒泡排序法:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现 ...

  9. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法

    排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...

最新文章

  1. exec不同文件l怎么汇总_ABAQUS常见问题汇总 - 2.0版.doc
  2. Eigen矩阵运算的混淆问题
  3. 安装windows系统时遇到的大坑——鼠标键盘没反应
  4. 网络故障排除工具 | 快速定位网络故障
  5. 用户行为数据分析的道、法、术、器、势
  6. springmvc整合hibernate-validator
  7. html访问java接口出现缓存_一个牛逼的多级缓存实现方案
  8. How does UDO tool resolve objects
  9. linux把2块盘挂到一个分区,linux系统如何挂载第二块硬盘
  10. React开发(149):二位数组的使用
  11. 美团笔试题——正则序列
  12. .Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView
  13. Java常用框架面试题
  14. 【论文撰写和程序员常用软件】
  15. “DOU出晋采”山西旅游数据发布会在太原举行,山西文旅牵手巨量引擎!
  16. 【光学】基于矩阵法和等效界面法分析光学薄膜膜对反射率影响附matlab代码
  17. 使用 SendARP 获取 MAC 地址
  18. EXCEL表格内部换行
  19. ROS——roscpp
  20. 2021年“东数西算”大背景下我国IDC产业发展现状与前景展望分析「图」

热门文章

  1. Linux基础-2文件及目录管理
  2. 利用 Python 插件 xlwings 读写 Excel
  3. H5自带的type=date或者month等日期控件移动端显示placeholder
  4. 很久的东西-也有价值
  5. 流程管理系统成功实施的六个步骤
  6. 在服务中创建用户进程的方法(C#版)
  7. 使用C#调用外部序或是执行DOS命令
  8. HDU1406 完数【水题】
  9. HDU4607 Park Visit(解法二)【废除!!!】
  10. 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)