Python排序算法动态图形化演示(实现代码)
2024-08-25 02:28:31
1、冒泡排序
冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
# 冒泡排序
def bubbleSort(li):
n = len(li)
for i in range(n-1):
for j in range(n-i-1):
if li[j] > li[j+1]:
li[j],li[j+1] = li[j+1],li[j] if __name__ == '__main__':
li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
bubbleSort(li)
print(li)
2、选择排序
基本思想:第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;第2趟,在待排序记录r2 ~ r[n]中选出最小的记录,将它与r2交换;以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
# 选择排序
def selectSort(li):
n = len(li)
for i in range(n):
temp = i
for j in range(temp,n):
if li[temp] > li[j]:
li[temp],li[j] = li[j],li[temp] if __name__ == '__main__':
li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
selectSort(li)
print(li)
3、快速排序
使用了分治法策略以及递归实现,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
# 快速排序
def quickSort(li):
if li:
mark=li[0]
little=[m for m in li if m<mark]
big=[x for x in li if x>mark]
return quickSort(little)+[mark]+quickSort(big)
else:
return []
if __name__=='__main__':
li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
print(quickSort(li))
4、插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
# 插入排序
def insertSort(li):
length = len(li)
for i in range(1,length):
x = li[i]
for j in range(i,-1,-1):
# j为当前位置,试探j-1位置
if x < li[j-1]:
li[j] = li[j-1]
else:
# 位置确定为j
break
li[j] = x if __name__ == '__main__':
li = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
insertSort(li)
print(li)
最新文章
- python-mysqldb安装
- HTML5_嵌套移动APP端的H5页面meta标签
- hdu 4616 Game
- php 解决大流量网站访问量问题
- SilverLight搭建WCF聊天室详细过程
- DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息
- 用批处理编译*.sln工程
- 《互联网初创企业password》书评
- Spring Boot 负载均衡之外置session状态保存
- 一、Openstack_Ocata环境部署准备
- 《github一天一道算法题》:并归排序
- Alpha冲刺置顶随笔
- PS 滤镜——素描算法(二)
- java--银行业务调度系统
- Spring的单例模式底层实现
- JS ajax请求参数格式( formData 、serialize)
- C# 从网站下载图片
- 讲一个关于paxos的故事...
- IE jQuery ajax 请求缓存问题
- BZOJ.5285.[AHOI/HNOI2018]寻宝游戏(思路 按位计算 基数排序..)
热门文章
- 改革春风吹满地,安卓新系统Q上线腾讯WeTest
- 用Metaclass实现一个精简的ORM框架
- 接口测试中抓包工具Charles的使用
- Charles 抓包使用教程
- 自己编写的:centos6.6上编译安装apache2.4+php5.6+mysql5.6【亲自】
- Protocol buffer的使用案例
- webpack构建Vue项目引入jQ时发生“&#39;$&#39; is defined but never used”的处理
- 页码插入JS脚本
- 10.openldap备份与恢复
- 使用Python一年多了,总结八个好用的Python爬虫技巧