快速排序

来源:互联网 发布:淘宝怎么看年销售额 编辑:程序博客网 时间:2024/05/17 22:55

也称其为分治法。基本思想:

快速排序复杂度:当基数值不能很好的分割数组,即一个子数组比原来数组小1,这是快速排序最差的情况。如果每次划分都出现这种情况,快排就退化为冒泡。时间复杂度为n^2. 最好的情况是每次把数组分成大小相等的两个数组,则时间复杂度为nlogn.

1. 从数列中取出一个数作为基准数。
2. 分区过程,将比这个数大的数全放在它的右边,小于或等于它的数全放在它的左边。再对左右区间重复第二步,知道各个区间只有一个数。


java实现快速排序:固定取样法,此方法性能较差,可优化为随机切分法和三取样法。

public static int partition(int []array,int lo,int hi){        //固定的切分方式        int key=array[lo];        while(lo<hi){            while(array[hi]>=key&&hi>lo){//从后半部分向前扫描                hi--;            }            array[lo]=array[hi];            while(array[lo]<=key&&hi>lo){从前半部分向后扫描                lo++;            }            array[hi]=array[lo];        }        array[hi]=key;        return hi;    }        public static void sort(int[] array,int lo ,int hi){        if(lo>=hi){            return ;        }        int index=partition(array,lo,hi);        sort(array,lo,index-1);        sort(array,index+1,hi);     }

python实现快速排序:
if __name__ == '__main__':
    l = [5,1,3,8,9,4,7,6]


    def first_sort(l):
        flag = l[-1]
        i = -1
        for j in range(len(l)-1):
            if l[j] > flag:
                pass
            else:
                i += 1
                tmp = l[i]
                l[i] = l[j]
                l[j] = tmp
        print(l)
        print("\n" + "*"*20 + "\n")


        tmp = l[-1]
        l[-1] = l[i+1]
        l[i+1] = tmp


        print(l)
        print("\n" + "*"*20 + "\n")


    first_sort(l)

0 0
原创粉丝点击