数据结构与算法(六):快速排序的python实现
2019-03-12 21:53
260 查看
快速排序
快速排序又称为划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
具体实现步骤:
- 从数列中挑出一个元素,称为"基准"(pivot)。
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
快速排序的python实现:
def quick_sort(alist,first,last): '''快速排序(升序)''' if first >= last: return mid_value = alist[first ] low = first #注意low和high是下标。 high = last while low<high: #让high游标向左移动 #这个等号表示把相等的情况放在high这边 while low < high and alist[high]>=mid_value: high-=1 alist[low] = alist[high] #让low游标向右移动 while low < high and alist[low]<mid_value: low+=1 alist[high] = alist[low] alist[low] = mid_value quick_sort(alist,first,low-1)#递归作用在alist上 quick_sort(alist,low+1,last) if __name__ == "__main__": li = [54,26,93,17,77,31,44,55,20] print(li) quick_sort(li,0,len(li)-1) print(li)
输出:
[54, 26, 93, 17, 77, 31, 44, 55, 20] [17, 20, 26, 31, 44, 54, 55, 77, 93]
时间复杂度分析:
- 最优时间复杂度:O(nlogn)
- 最坏时间复杂度:O(n2) (恰好每次只分给某一边一个数)
- 稳定性:不稳定
相关文章推荐
- 用Python实现的数据结构与算法:快速排序
- 快速排序的python实现
- 快速排序之python实现
- 利用Python实现快速算法排序
- 排序算法之快速排序,冒泡排序用python代码实现
- 快速排序 java与python实现
- python实现快速排序
- python 实现插入排序,冒泡排序,快速排序,选择排序
- Python递归实现快速排序
- python实现排序算法之快速排序
- Python实现快速排序
- 用Python实现八大排序算法--快速排序
- 快速排序--C语言实现、python实现
- 【编程练习】快速排序,Java和Python实现
- python排序算法的实现-快速排序
- 快速排序、代码实现(python3版)及其时间空间复杂度分析
- Python实现快速排序
- 快速排序Python实现--《数据结构》(C语言版)严蔚敏
- 算法基础:排序(三)——快速排序——Python实现
- python简洁代码实现快速排序