• 快速排序 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]的值进行互换,进行之后的递归

    编程实现:

     1 #快排的主函数,传入参数为一个列表,左右两端的下标
     2 def QuickSort(list,low,high):
     3     if high > low:
     4         #传入参数,通过Partitions函数,获取k下标值
     5         k = Partitions(list,low,high)
     6         #递归排序列表k下标左侧的列表
     7         QuickSort(list,low,k-1)
     8         # 递归排序列表k下标右侧的列表
     9         QuickSort(list,k+1,high)
    10 
    11 def Partitions(list,low,high):
    12     left = low
    13     right = high
    14     #将最左侧的值赋值给参考值k
    15     k = list[low]
    16     #当left下标,小于right下标的情况下,此时判断二者移动是否相交,若未相交,则一直循环
    17     while left < right :
    18         #当left对应的值小于k参考值,就一直向右移动
    19         while list[left] <= k:
    20             left += 1
    21         # 当right对应的值大于k参考值,就一直向左移动
    22         while list[right] > k:
    23             right = right - 1
    24         #若移动完,二者仍未相遇则交换下标对应的值
    25         if left < right:
    26             list[left],list[right] = list[right],list[left]
    27     #若移动完,已经相遇,则交换right对应的值和参考值
    28     list[low] = list[right]
    29     list[right] = k
    30     #返回k值
    31     return right
    32 
    33 list_demo = [6,1,2,7,9,3,4,5,10,8]
    34 print(list_demo)
    35 QuickSort(list_demo,0,9)
    36 print(list_demo)
  • 相关阅读:
    MySQ随笔2(连接表、分组)
    MySQL随笔
    Python随笔1
    要学习但还没学的知识点2016年8月4号
    jQuery备忘录--私家版
    Chrome 中的彩蛋——T-Rex
    JavaScript多线程初步学习
    实例:jQuery实现标签切换
    实例:用jQuery实现垂直和水平下拉 菜单
    AJAX编程模板
  • 原文地址:https://www.cnblogs.com/kunpengv5/p/7833361.html
Copyright © 2020-2023  润新知