失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python快速排序算法循环_算法:快速排序的Python实现

python快速排序算法循环_算法:快速排序的Python实现

时间:2024-06-06 17:03:32

相关推荐

python快速排序算法循环_算法:快速排序的Python实现

一、概述

快速排序(quick sort)是一种分治排序算法。该算法首先 选取 一个划分元素(partition element,有时又称为pivot);接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上;然后分别对left和right两个部分进行递归排序。

其中,划分元素的 选取 直接影响到快速排序算法的效率,通常选择列表的第一个元素或者中间元素或者最后一个元素作为划分元素,当然也有更复杂的选择方式;划分 过程根据划分元素重排列表,是快速排序算法的关键所在。

二、Python实现

1. 标准实现

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def stdQuicksort(L):

qsort(L, 0, len(L) - 1)

def qsort(L, first, last):

if first < last:

split = partition(L, first, last)

qsort(L, first, split - 1)

qsort(L, split + 1, last)

def partition(L, first, last):

# 选取列表中的第一个元素作为划分元素

pivot = L[first]

leftmark = first + 1

rightmark = last

while True:

while L[leftmark] <= pivot:

# 如果列表中存在与划分元素pivot相等的元素,让它位于left部分

# 以下检测用于划分元素pivot是列表中的最大元素时,

#防止leftmark越界

if leftmark == rightmark:

break

leftmark += 1

while L[rightmark] > pivot:

# 这里不需要检测,划分元素pivot是列表中的最小元素时,

# rightmark会自动停在first处

rightmark -= 1

if leftmark < rightmark:

# 此时,leftmark处的元素大于pivot,

#而rightmark处的元素小于等于pivot,交换二者

L[leftmark], L[rightmark] = L[rightmark], L[leftmark]

else:

break

# 交换first处的划分元素与rightmark处的元素

L[first], L[rightmark] = L[rightmark], L[first]

# 返回划分元素pivot的最终位置

return rightmark

2. Pythonic实现

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def pycQuicksort(L):

if len(L) <= 1: return L

return pycQuicksort([x for x in L if x < L[0]]) + \

[x for x in L if x == L[0]] + \

pycQuicksort([x for x in L if x > L[0]])

如果觉得《python快速排序算法循环_算法:快速排序的Python实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。