Python实现快速排序的方法详解

作者:鲸落丶 时间:2022-08-29 13:08:35 

本文实例讲述了Python实现快速排序的方法。分享给大家供大家参考,具体如下:

说起快排的Python实现,首先谈一下,快速排序的思路:

1、取一个参考值放到列表中间,初次排序后,让左侧的值都比他小,右侧的值,都比他大。

2、分别对左侧和右侧的部分递归第1步的操作

实现思路:

  • 两个指针left,right分别指向列表的第一个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素list[0],称为K

  • 然后left指向的值先和参考值K进行比较,若list[left]小于或等于K值,left就一直向右移动,left+1,直到移动到大于K值的地方,停住

  • right指向的值和参考值K进行比较,若list[right]大于K值,right就一直向左移动,right-1,直到移动到小于K值的地方,停住

  • 此时,left和right若还没有相遇,即left还小于right,则二者指向的值互换

  • 若已经相遇则说明,第一次排序已经完成,将list[right]与list[0]的值进行互换,进行之后的递归

编程实现:


#快排的主函数,传入参数为一个列表,左右两端的下标
def QuickSort(list,low,high):
 if high > low:
   #传入参数,通过Partitions函数,获取k下标值
   k = Partitions(list,low,high)
   #递归排序列表k下标左侧的列表
   QuickSort(list,low,k-1)
   # 递归排序列表k下标右侧的列表
   QuickSort(list,k+1,high)
def Partitions(list,low,high):
 left = low
 right = high
 #将最左侧的值赋值给参考值k
 k = list[low]
 #当left下标,小于right下标的情况下,此时判断二者移动是否相交,若未相交,则一直循环
 while left < right :
   #当left对应的值小于k参考值,就一直向右移动
   while list[left] <= k:
     left += 1
   # 当right对应的值大于k参考值,就一直向左移动
   while list[right] > k:
     right = right - 1
   #若移动完,二者仍未相遇则交换下标对应的值
   if left < right:
     list[left],list[right] = list[right],list[left]
 #若移动完,已经相遇,则交换right对应的值和参考值
 list[low] = list[right]
 list[right] = k
 #返回k值
 return right
list_demo = [6,1,2,7,9,3,4,5,10,8]
print(list_demo)
QuickSort(list_demo,0,9)
print(list_demo)

运行结果:

[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

希望本文所述对大家Python程序设计有所帮助。

来源:https://www.cnblogs.com/kunpengv5/p/7833361.html

标签:Python,快速排序
0
投稿

猜你喜欢

  • 网页版面布局的处理问题

    2008-06-05 12:32:00
  • 经验之谈:MySQL与ASP.NET配合更强大

    2008-12-23 15:26:00
  • Python中安装easy_install的方法

    2022-06-22 20:30:00
  • PHP抓取及分析网页的方法详解

    2023-11-24 08:17:10
  • Python unittest单元测试框架的使用

    2021-11-26 15:56:37
  • Python真题案例之二分法查找详解

    2023-09-23 01:39:07
  • 解决python路径错误,运行.py文件,找不到路径的问题

    2023-03-13 05:47:33
  • 4个Web图片在线压缩优化工具

    2009-10-13 21:02:00
  • SQL提供的进行数据传输的实用程序—BCP

    2009-01-23 13:45:00
  • Flume监听oracle表增量的步骤详解

    2023-07-20 00:39:32
  • 关于淘宝页面编码的疑惑

    2009-12-04 12:54:00
  • Python实现批量绘制遥感影像数据的直方图

    2023-09-04 10:35:53
  • JavaScript风格要素

    2007-10-25 16:57:00
  • Django框架下在URLconf中指定视图缓存的方法

    2023-10-03 01:54:28
  • 详解python3 GUI刷屏器(附源码)

    2022-02-02 12:34:15
  • Access 2002的三个实用技巧

    2007-10-22 12:22:00
  • python使用Faker进行随机数据生成

    2023-12-21 14:24:33
  • 聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    2022-01-03 19:10:57
  • 详解python数据结构之栈stack

    2023-02-12 17:48:56
  • 如何利用SQL Server 2005中的模板参数

    2009-01-23 15:02:00
  • asp之家 网络编程 m.aspxhome.com