Python实现快速排序
程序员文章站
2024-03-19 15:19:52
...
排序原理
1、设定一个分界值(数组最开始的数,切分后就是切分后数组的第一个数)
2、将大于等于分界值的数放到右边,小于分界值的放到左边
3、然后对左侧的数组和右侧的数组在继续分成左右两个部分
class Quick:
def __init__(self):
super(Quick, self).__init__()
@staticmethod
def sort(a):
Quick.quick(a, 0, len(a)-1)
@staticmethod
def quick(a, start, end):
if start >= end:
return
partition = Quick.partition(a, start, end)
Quick.quick(a, partition, end)
Quick.quick(a, start, partition-1)
@staticmethod
def partition(a, start, end):
# 快速排序的核心
mid = start
p1 = start + 1
p2 = end
while True:
# 比较mid(分界值索引)和p1处的大小, mid 比 p1 大就继续循环,否则break
while Quick.compare(a, mid, p1):
# print(p1)
if p1 == end:
break
p1 += 1
# 比较mid(分界值索引)和p1处的大小, mid 比 p2小就继续循环,否则break
while Quick.compare(a, p2, mid):
if p2 == start:
break
p2 -= 1
# 如果p2 > p1 就交换位置,(注意是p1和p2交换位置)
if p2 > p1:
Quick.exchange(a, p1, p2)
else:
break
# print(p1, p2)
# 到这一步,说明p1,p2 已经碰头了,p2和p1 已经将值都遍历了,没有大于mid的值,将mid 和 p2 交换位置,切分数组
Quick.exchange(a, start, p2)
return p1
@staticmethod
def exchange(a, i, j):
temp = a[i]
a[i] = a[j]
a[j] = temp
@staticmethod
def compare(a, i, j):
if a[i] >= a[j]:
return True
return False
if __name__ == '__main__':
quick = Quick()
t = [1, 3, 2, 4, 0, 6, 5, 7, 123, 1, 25, 3, 123, 5, 5, 2, 3, 5, 9, 12, 34, 231, 32, 12, 23]
quick.sort(t)
print(t)
上一篇: 常见查找算法:二分查找算法
下一篇: SSH访问安全配置方法之一