前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之排序算法:快速排序与冒泡排序

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

作者头像
上帝
发布2018-05-18 10:25:13
8070
发布2018-05-18 10:25:13
举报
文章被收录于专栏:影子

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

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

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

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

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

  嗯,酷酷的时间到了

,先我大概讲下快速排序

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

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

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

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

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

代码语言:javascript
复制
 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>大于基准值的直接略过,小于基准值的与基准值交换位置

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

代码语言:javascript
复制
 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中对于数组也内置了一键排序算法:

代码语言:javascript
复制
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” 框架搭建,如兴趣的记得点关注?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档