zoukankan      html  css  js  c++  java
  • 快速排序 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)
  • 相关阅读:
    LeetCode: Reverse Linked List
    DataBase: MySQL在.NET中的应用
    DataBase: LeetCode
    DirectShow+VS2010+Win7配置说明
    MathType应用:批量改变公式格式
    $LaTeX$笔记:首字下沉
    Latex学习笔记-序
    反思--技术博客的写作应该是怎样的?
    用Latex写学术论文:作者(Author)&摘要(Abstract)
    用Latex写学术论文: IEEE Latex模板和文档设置(documentclass)
  • 原文地址:https://www.cnblogs.com/kunpengv5/p/7833361.html
Copyright © 2011-2022 走看看