• python 八大排序快速排序


    A、快速排序

    1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
    2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
    3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
    4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

    5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

    如列表:

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

    [6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
    从右向左开始移动第一次
    当j移动到5此时lst[j]小于key6
    i j 值互换
    [5, 1, 2, 7, 9, 3, 4, 6, 10, 8]
    从左向右开始移动第一次
    当i移动到7此时lst[i]大于key6
    i j 值互换
    [5, 1, 2, 6, 9, 3, 4, 7, 10, 8]
    从右向左开始移动第二次
    当j移动到4此时lst[j]小于key6
    i j 值互换
    [5, 1, 2, 4, 9, 3, 6, 7, 10, 8]
    从左向右开始移动第二次
    当i移动到9此时lst[i]大于key6
    i j 值互换
    [5, 1, 2, 4, 6, 3, 9, 7, 10, 8]
    从右向左开始移动第三次
    当j移动到3此时lst[j]小于key6
    i j 值互换
    [5, 1, 2, 4, 3, 6, 9, 7, 10, 8]
    此时6 刚好在中间

    lst分成两部分

    左边[5, 1, 2, 4, 3]

    右边[9, 7, 10, 8]

    重新按照刚刚排序方法

    将得到结果
    左边[3, 1, 2, 4, 5]

    右边[8, 7, 9, 10]

    继续排序

    .....(递归)

    实现方法:

    面向过程:

    # -*- coding: gbk -*- 
    __author__ = 'HZQ'
    lst = [6,1,2,7,9,3,4,5,10,8]
    i=0
    j=len(lst)-1
    key=lst[0]
    print(lst)
    print("从右向左开始移动第一次")
    while lst[j]>=key and j>i:
        j-=1
    print("当j移动到{}此时lst[j]小于key{}".format(lst[j],key))
    print("i j 值互换")
    lst[i],lst[j]=lst[j],lst[i]
    print(lst)
    print("从左向右开始移动第一次")
    while lst[i]<=key and j>i:
        i+=1
    print("当i移动到{}此时lst[i]大于key{}".format(lst[i],key))
    print("i j 值互换")
    lst[i],lst[j]=lst[j],lst[i]
    
    print(lst)
    print("从右向左开始移动第二次")
    while lst[j]>=key and j>i:
        j-=1
    print("当j移动到{}此时lst[j]小于key{}".format(lst[j],key))
    print("i j 值互换")
    
    lst[i],lst[j]=lst[j],lst[i]
    print(lst)
    print("从左向右开始移动第二次")
    while lst[i]<=key and j>i:
        i+=1
    print("当i移动到{}此时lst[i]大于key{}".format(lst[i],key))
    print("i j 值互换")
    lst[i],lst[j]=lst[j],lst[i]
    print(lst)
    print("从右向左开始移动第三次")
    while lst[j]>=key and j>i:
            j-=1
    print("当j移动到{}此时lst[j]小于key{}".format(lst[j],key))
    print("i j 值互换")
    lst[i],lst[j]=lst[j],lst[i]
    print(lst)

    面向对象:

    # -*- coding: gbk -*- 
    __author__ = 'HZQ'
    
    lst = [6,1,2,7,9,3,4,5,10,8]
    def minddle_index(lst,low,high):
        start_index=low#最左边
        end_index=high#左右边
        if start_index<end_index:#前提条件右边大于左边
            key=lst[start_index]#设置参照key
            while end_index>start_index:
                while lst[end_index]>=key and end_index>start_index:
                    end_index-=1
                lst[start_index],lst[end_index]=lst[end_index],lst[start_index]
                while lst[start_index]<=key and end_index>start_index:
                    start_index+=1
                lst[start_index],lst[end_index]=lst[end_index],lst[start_index]
            #循环排序,递归
            minddle_index(lst,low,start_index-1)#左边lst再次排序
            minddle_index(lst,end_index+1,high)#右边lst再次排序
    
    minddle_index(lst,0,len(lst)-1)
    print(lst)
  • 相关阅读:
    github国内加速
    js 关闭MediaDevices.getUserMedia()
    windows server 安装 mysql + nondejs连接mysql
    sql常用语法大全
    当小程序的flex布局遇到button时,justify-content不起作用的原因及解决方案
    c# 使用Sharp7对PLC读写操作
    c#中引用c++动态库
    Python+Django
    python+pycharm+Django报错
    Dapper支持各类数据库(mysql,mssql,FireBird,Oracle)
  • 原文地址:https://www.cnblogs.com/HZQHZA/p/7608891.html
Copyright © 2020-2023  润新知