快速排序

来源:互联网 发布:c语言恶搞小程序 编辑:程序博客网 时间:2024/05/16 09:12

快速排序是基于分治策略的排序算法,对于一个给定的数组a[l,r],其按三个步骤进行排序:
1. 分解:以a[l]为基准元素将数组a分成三段a[l,q-1],a[q],a[q+1,r],其中a[l,q-1]中元素都比a[p]小,a[q]等于a[p],a[q+1,r]元素都比a[p]大;其中排序时以通常以a[l]为基准元素,值为key,令low = l , high = r,然后令high–,直到找到比key小的元素,此时该元素位置是high, 将该元素赋值给a[l];接着令low++,直到找到比key大的元素,此时该元素位置是low,将该元素赋值给之前的a[high],然后将key赋值给a[low],循环,直到low>=high;
2. 递归:递归调用快速排序算法对a[l,q+1]和p[q+1,r]进行排序;
3. 合并

# coding:utf-8#分解def partition(a,l,r):    key = a[l]    low = l    high = r    while low < high :        while (low < high) and a[high] >= key:            high = high - 1        a[low] = a[high]        while (low < high) and (a[low] <= key):            low = low + 1        a[high] = a[low]        a[low] = key    return low#递归def quicksort(a,l,r):    if l < r:        p  = partition(a,l,r)        quicksort(a,l,p-1)        quicksort(a,p+1,r)    return a#测试集s = [54862148151542]print("before sort:",s)s1 = quicksort(s, l = 0, r = len(s) - 1)print("after sort:",s1)
原创粉丝点击