数据结构与算法之快速排序

一、前言

快速排序是一种交换排序。

二、算法思想

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

三、代码
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 28 09:31:57 2018

@author: Administrator
"""

def QuickSort(input_list,left,right):
    def division(input_list,left,right):
        base=input_list[left]
        while left<right:
            while left<right and input_list[right]>=base:
                right-=1
            input_list[left]=input_list[right]
            while left<right and input_list[left]<=base:
                left+=1
            input_list[right] = input_list[left]
        input_list[left]=base
        return left
    if left<right:
        base_index=division(input_list,left,right)
        QuickSort(input_list,left,base_index-1)
        QuickSort(input_list,base_index+1,right)
    
if __name__=='__main__':
    input_list=[2,5,4,8,3,9,0,1]
    print('排序前:',input_list)
    QuickSort(input_list,0,len(input_list)-1)
    print('排序后:',input_list)

四、算法分析

1.快速排序的算法性能


2.时间复杂度

当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差。

而当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好。

所以,数据越随机分布时,快速排序性能越好;数据越接近有序,快速排序性能越差。

3.空间复杂度

快速排序在每次分割的过程中,需要 1 个空间存储基准值。而快速排序的大概需要 NlogN次的分割处理,所以占用空间也是 NlogN 个。

4.算法稳定性

在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。





猜你喜欢

转载自blog.csdn.net/nageaixiaodenanhai/article/details/79734208