快速排序的python版本

2021-09-01 09:23:22 字數 1071 閱讀 8983

快速排序屬於分治演算法中最經典的乙個例項,不同於氣泡排序和選擇排序,快排的思想是選定乙個基準元素,根據該元素對列表進行初步排序,選出比該元素小的排在該元素之前,比該元素大的排在其後,然後,在對這兩組元素進行遞迴排序。

關於快排的結構,書本上大致分為兩類,單向快排和雙向快排。

演算法導論介紹的快排屬於單向快排,始終從乙個方向對列表進行排序,將列表劃分。**如下

選定列表尾部元素a[r]為基準元素,遍歷到0到r-1的所有元素,**中i用來定位,我認為是用來定位劃分好時基準元素的位置,當當前元素小於基準時,i++,當遍歷完列表時,交換基準元素和i+1.列表被a[i+1]分為兩部分,前面小後面大。

還有一種屬於雙向排序,同樣是選定乙個基準元素,不過這次從列表兩個方向進行劃分。

1、選定基準元素,一般選擇第乙個元素

2、從列表前往後遍歷,當元素小於基準時,i++,當大於基準時,停止遍歷

3、從列表後往前遍歷,當元素大於基準時,j–,當小於基準時,停止遍歷

4、當兩個方向遍歷還沒有相遇時,交換兩個停止元素

5、當兩個方向相遇,停止遍歷,交換基準元素與a[j]

關於遍歷相遇時如何交換元素以及返回哪個值我參考了知乎上的一篇文章新增鏈結描述

**如下:

ef quicksort(a,p,r):

if p=x:

right=right-1

while left

left=left+1

a[left],a[right]=a[right],a[left]

a[p],a[right]=a[right],a[p]

return right

import random

a=for i in range(10):

print(a)

quicksort(a,0,len(a)-1)

print(a)

快速排序(Python版本)

快速排序 python版本 這裡是一段防爬蟲文字,請讀者忽略。本文原創首發於csdn,作者idys 部落格首頁 先從數列中取出乙個數作為基準數。分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。再對左右區間重複第二步,直到各區間只有乙個數。0 1234 5678 97065...

快速排序演算法(python版本)

實現python 如下 import syssys.setrecursionlimit 100000 設定遞迴的最大限制次數為100000次from cal time import import random 遞迴partition函式 def partition li,left,right tmp...

python快速排序排序 python快速排序

import random def rand n for i in range n yield random.randint 0,1000 建立乙個隨機數列表 def createlist n lists for i in rand n return lists 挖坑法快速排序 def quick ...