python 八大排序快速排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

























以上是关于python 八大排序快速排序的主要内容,如果未能解决你的问题,请参考以下文章

Python八大算法的实现,插入排序希尔排序冒泡排序快速排序直接选择排序堆排序归并排序基数排序。

C语言实现八大排序算法

八大排序算法---基于python

八大排序算法总结:快速排序

《糊涂算法》之八大排序——快速排序

八大排序算法总结