Python之排序算法:快速排序与冒泡排序

简介: Python之排序算法:快速排序与冒泡排序转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html  入坑(简称IT)这一行也有些年头了,但自老师讲课提过排序算法后几乎再也没写过排序算法,当然这也没有什么问题,实际的排序大多是将数据从数据库取...

Python之排序算法:快速排序与冒泡排序

转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/7828610.html

  入坑(简称IT)这一行也有些年头了,但自老师讲课提过排序算法后几乎再也没写过排序算法,当然这也没有什么问题,实际的排序大多是将数据从数据库取出来前在数据库中就已经做好排序了,当然这个排序是SQL范畴的,如果真的需要在代码中排序也有对应的工具类来处理,就比如有Java中有Array.sort()来排列Array(数组类型),功能虽说有限制,但也免去了撸码的时间,嗯,不用写的大好处就是减少了开发时间,当然也增加了喝咖啡、网购的时间~

 

 

闲言多废话,先展示下快速排序的动态图再出代码,方便理解:

(上图是从维基百科中抓取的,包括本节所讲所的冒泡排序也是维基百科的)

  嗯,酷酷的时间到了,先我大概讲下快速排序

    A>先取一个数(一般是第一个数)作为参照的基准值

    B>将待排序的数组分两边,一左一右分别指向数组的两边

    C>左右两边分别向中间移,所指的数值大于基准值的向基准值右边放(如果是右边所指的值就挪动指向的位置,值不动),左边也一样

    D>将基准位置两边的值分别排序(一般是递归调用)

好了,以上大概就是快速排序的的一半步骤,如有不懂之处,建议顺着代码来推测快速排序的整个过程,并不难

 1 #!/usr/bin/env Python
 2 #快速排序法
 3 def quickSort(arr,_l,_r):
 4     l,r,t=_l,_r,0
 5     if l <= r:
 6         t=arr[_l]   #基准参数
 7         while(l<r):
 8             #当右边的值大于基准参数时,右值向左挪一(位置和值)
 9             while l<r and arr[r]>=t:
10                 r=r-1
11             arr[l]=arr[r]   #右值挪到左值的位置
12             # 当左边的值小于基准参数时,右值向左挪一(位置和值)
13             while l<r and arr[l]<=t:
14                 l=l+1
15             arr[r]=arr[l]   #左值放入右值的位置
16         '''
17             当前一轮排完后将基准参数放入
18             将基准值左右两边的数值分别放入排序(递归调用)
19         '''
20         arr[r]=t #基准参数归位
21 
22         quickSort(arr,_l,l-1) #基准位置左侧数据排序
23         quickSort(arr,l+1,_r) #基准位置右侧数据排序
24 
25 i=[23,1,6,77,8,-11,100,11.1,99,24,21]
26 print ("排序之前")
27 print (i)
28 print ("排序之后")
29 quickSort(i,0,len(i)-1)
30 print (i)
31 
32 ==========以下是控制台输出===========
33 
34 排序之前
35 [23, 1, 6, 77, 8, -11, 100, 11.1, 99, 24, 21]
36 排序之后
37 [-11, 1, 6, 8, 11.1, 21, 23, 24, 77, 99, 100]

 

嗯~,快速排序完毕,先展示下冒泡排序的动态图,密集恐惧症者勿入

 

结合着图,冒泡排序的过程大致是这样子的:

  A>取待排序数组中的一个值(一般是第一个值)作为基准值依次与其它所有数值比较

  B>大于基准值的直接略过,小于基准值的与基准值交换位置

额~,还是用代码说话还是比较好一些吧~

 1 #!/usr/bin/env Python
 2 
 3 #冒泡排序法
 4 def bubleSort(arr):
 5     for k in range(len(arr)):
 6         temp = arr[k]   #临时值,用于交换
 7         for j in range(k+1,len(arr)):
 8             '''
 9                 若值比基准值小则将基准值与当前值交换位置
10             '''
11             if arr[j]<arr[k]:
12                 temp=arr[k]
13                 arr[k]=arr[j]
14                 arr[j]=temp
15                 continue;   #这里可有可无
16 
17 i=[23,1,6,77,8,-11,100,11.1,99,24,21]
18 
19 print ("排序前")
20 print (i)
21 print ("排序后")
22 bubleSort(i)
23 print (i)
24 
25 ==========控制台输出============
26 排序前
27 [23, 1, 6, 77, 8, -11, 100, 11.1, 99, 24, 21]
28 排序后
29 [-11, 1, 6, 8, 11.1, 21, 23, 24, 77, 99, 100]

 

既然是Python,当然Python中对于数组也内置了一键排序算法:

1 ii=[23,1,6,77,8,-11,100,11.1,99,24,21]
2 ii.sort()    #数组内置sort方法排序
3 print ("ii",ii)
4 ij=[23,1,6,77,8,-11,100,11.1,99,24,21]
5 ij=sorted(ij) #外部方法排序(相当于工具类)
6 print ("ij",ij)

既然Python已经提供了排序方法,还要白忙活一气,是不是很悲伤

以上排序代码真实可信,均为本猿一行行码出,写得十分痛苦,同时如有遗漏及错误之处敬请提出~

 

That's All,现在是 2017-11-19 16:03:22 (周五),小学生都忙着赶作业,我也该撤了

下一节是 “Django” 框架搭建,如兴趣的记得点关注

 

相关文章
|
1天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
30 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
1天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
30 11
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
2天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
17 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
12天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
48 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
21小时前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
22 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
9天前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
24 9
|
2天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
11 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
10天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
27 5
|
30天前
|
搜索推荐 Python
Python基础编程:冒泡排序和选择排序的另一种while循环实现
这篇文章介绍了Python中冒泡排序和选择排序的实现,提供了使用while循环的替代方法,并展示了排序算法的运行结果。
16 2
Python基础编程:冒泡排序和选择排序的另一种while循环实现
|
1月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
17 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法