排序原理 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)