Python简单的实现快速排序
常见的快排排序:快排实现原理,可以更好理解快排思想
def quick_sort(alist, start, end): if start >= end: return mid = alist[start] left = start right = end # left与right未重合,就向中间移动 while left < right: while left < right and alist[right] >= mid: right -= 1 alist[left] = alist[right] while left < right and alist[left] < mid: left += 1 # a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63] alist[right] = alist[left] # 从循环退出后,left与right相遇,即left==right alist[left] = mid # 对左边部分执行快速排序 quick_sort(alist, start, left-1) # 对右边部分执行快速排序 quick_sort(alist, left+1, end) a_list = [1, 12, 22, 34, 21, 4, 6, 8, 11, 54, 36, 7, 3, 0, 60, 62, 63] quick_sort(a_list, 0, len(a_list) - 1) print(a_list)
输出结果时,我发现这种方法直接改变了原有列表(使用的Python3.6)
使用列表推导式和快速排序的递归思想,实现快排:
def qucik_sort(alist): if len(alist) <= 1: return alist return qucik_sort([i for i in alist[1:] if i < alist[0]]) + alist[0:1] + qucik_sort([i for i in alist[1:] if i >= alist[0]]) ls = [22, 21, 34, 65, 12, 89, 3, 9, 66] print(qucik_sort(ls)) print(ls)
理解快速排序思想之后,这个方法,使用的代码非常少
而且该方法不改变原有的列表