ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

快速排序

2021-11-08 19:35:14  阅读:214  来源: 互联网

标签:last rcorsor 基准值 游标 li 排序 快速 first


排序思路: 1、一般以数组中的第一个元素作为基准值

               2、左游标右移,遇到比基准值大的停

              3、又游标左移,遇到比基准值小的停

               情况1:左游标< 右游标          左右游标互换位置

              情况2:左游标> 右游标          右游标和基准值互换位置

def quick_sort(li,first,last):    
    # 递归出口
    #基准值正确位置为0: split_position = 0
    #first: 0
    #last: spilt_position-1 = -1
    if first > last:  
        return


    #找到基准值的正确位置的下标索引
    split_position = part(li,first,last)
    #递归思想,左右两边继续执行快排
    quick_sort(li,first,split_position -1)
    quick_sort(li,split_position +1,last)




  

def part(li,first,last):
    #给一个基准值找到正确位置
    #first: 快速排序部分的第一个元素的下标索引
    #last: 快速排序部分的第一个元素的下标索引
    mid = li[first]
    lcorsor = first + 1
    rcorsor = last
    
    sign = True
    while sign:    
        #左游标右移
        while lcursor <= rcursor and li[lcursor] <= mid:
            lcorsor +=1
        #右游标左移
        while lcursor <= rcursor and li[rcursor] >= mid:
            lcorsor -=1
    
        if lcorsor < rcorsor:
            #左右游标互换位置
            li[lcorsor],li[rcorsor] = li[rcorsor],li[lcorsor]
        else:
            #右游标和基准值互换位置
            li[first],li[rcorsor] = li[rcorsor],li[first]

            #执行到这个分支,基准值的正确位置已找到,终止此循环
            sign = False

   return rcorsor



标签:last,rcorsor,基准值,游标,li,排序,快速,first
来源: https://blog.csdn.net/huihiu8yuih/article/details/121212019

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有