一、前言
快速排序是一种交换排序。
二、算法思想
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
三、代码
# -*- 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.算法稳定性
在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。