快速排序(Python版本)

2021-10-24 14:00:45 字數 2793 閱讀 9560

快速排序(python版本)

這裡是一段防爬蟲文字,請讀者忽略。

本文原創首發於csdn,作者idys

部落格首頁:

先從數列中取出乙個數作為基準數。

分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

再對左右區間重複第二步,直到各區間只有乙個數。 0

1234

5678

970657

8850

4283

7330

85開始:i=0j=9x=list1[0]=70

首先從j=9開始,檢視是否list[j]小於x,當j等於9時,因為list[j]>x不符合條件,所以j自減1,此時j=8,當j=8時,發現list[j]

現在從i開始因為上一次i++了,所以i=1,先看因為list[1] < x,所以i++,當i=3時,list[i]>x,此時將list[j] = list[i] = 88,然後j--

重複23的操作,直到i==j為止,將x賦給list[i]

最後列表結果為01

2345

6789

3065742

5070

8373

8885

這個時候可以看到,最後i==jij都等於5,這個時候將list[5]=70,但是排序還沒有完,我們還只是讓list[5]左邊的數都比它小,list[5]右邊的數,都比它大。但是左右兩邊不一定有序。所以需要讓左右兩邊變為乙個陣列。重新執行上述規則。這就需要用到分治演算法。

import random

defquick_sort

(mylist_and:

list):

def_quick_sort

(mylist:

list

, left:

int=

0, right:

int=

len(mylist_and)-1

)->

list

:if left < right:

i = left

j = right

x = mylist[i]

while i < j:

while i < j and mylist[j]

> x:

j -=

1if i < j:

mylist[i]

= mylist[j]

i +=

1while i < j and mylist[i]

< x:

i +=

1if i < j:

mylist[j]

= mylist[i]

j -=

1 mylist[i]

= x _quick_sort(mylist, i +

1, right)

_quick_sort(mylist, left, i -1)

return mylist

return _quick_sort(mylist_and)

if __name__ ==

'__main__'

: list1 =[1

,3,4

,7,12

,3,5

,80,1

,12,101

,101

,201,21

,7,9

] quick_sort(list1)

list2 =

[ random.randint(0,

1000

)for i in

range(10

)]print

("list2: "

.format

(list2)

)print

("sort after list2 "

.format

(quick_sort(list2)))

print

("sort after list1: "

.format

(list1)

)

list2: [583, 766, 583, 279, 995, 306, 767, 884, 488, 607]

sort after list2 [279, 306, 488, 583, 583, 607, 766, 767, 884, 995]

sort after list1: [1, 1, 3, 3, 4, 5, 7, 7, 9, 12, 12, 21, 80, 101, 101, 201]

快速排序的python版本

快速排序屬於分治演算法中最經典的乙個例項,不同於氣泡排序和選擇排序,快排的思想是選定乙個基準元素,根據該元素對列表進行初步排序,選出比該元素小的排在該元素之前,比該元素大的排在其後,然後,在對這兩組元素進行遞迴排序。關於快排的結構,書本上大致分為兩類,單向快排和雙向快排。演算法導論介紹的快排屬於單向...

快速排序演算法(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 ...