Python 實現快速排序和隨機快速排序

2022-08-02 15:21:07 字數 2070 閱讀 5120

直接上**:

#

快速排序

#coding: utf-8

defquicksort(a,left,right):

if(leftmid =partition(a,left,right)

quicksort(a,left,mid-1)

quicksort(a,mid+1,right)

defpartition(a,left,right):

x =a[right]

i = left-1 #

初始i指向乙個空,保證0到i都小於等於 x

for j in range(left,right): #

j用來尋找比x小的,找到就和i+1交換,保證i之前的都小於等於x

if(a[j]<=x):

i = i+1a[i],a[j] =a[j],a[i]

a[i+1],a[right] = a[right],a[i+1] #

0到i 都小於等於x ,所以x的最終位置就是i+1

return i+1

while

(true):

try:

s = input("

輸入待排序陣列:\n

") #

待排陣列

l =s.split()

a = [int(t) for t in

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

print ("

排序後:")

for item in

a:

print(item,end='')

print("\n"

)

except

:

break

隨機快速排序:

#

隨機快速排序

#coding: utf-8

import

random

defrandom_quicksort(a,left,right):

if(leftmid =random_partition(a,left,right)

random_quicksort(a,left,mid-1)

random_quicksort(a,mid+1,right)

defrandom_partition(a,left,right):

t = random.randint(left,right) #

生成[left,right]之間的乙個隨機數

a[t],a[right] =a[right],a[t]

x =a[right]

i = left-1 #

初始i指向乙個空,保證0到i都小於等於 x

for j in range(left,right): #

j用來尋找比x小的,找到就和i+1交換,保證i之前的都小於等於x

if(a[j]<=x):

i = i+1a[i],a[j] =a[j],a[i]

a[i+1],a[right] = a[right],a[i+1] #

0到i 都小於等於x ,所以x的最終位置就是i+1

return i+1

while

(true):

try:

s = input("

輸入待排序陣列:\n

") #

待排陣列

l =s.split()

a = [int(t) for t in

l] random_quicksort(a,0,len(a)-1)

print ("

排序後:")

for item in

a:

print(item,end='')

print("\n"

)

except

:

break

快速排序和隨機快速排序

嚴書上的快排是以最左邊元素為樞紐的,如下 include include using namespace std intpartition int a,int left,int right a left p return left void quicksort int a,int left,int ...

隨機快速排序C 實現

傳統的隨機快速排序,是選定乙個數,然後以這個數為標桿,分為小於等於 標桿 區和大於 標桿 區。改進的快速排序,分為,小於區,等於區和大於區。這個劃分的過程用partition函式實現。具體請看 ifndef quicksort h define quicksort h include include...

python 實現氣泡排序和快速排序

11.28 學習筆記 設定flag在一定程度上優化了氣泡排序 實現氣泡排序 氣泡排序就是相鄰兩個數比較,大的後移,然後一輪過去後,大的會在最後乙個位置 defbubble sort list for i in range 0 len list 輪數 flag false for j in range...