python快速排序 兩種方法

2021-09-24 22:18:55 字數 1970 閱讀 7226

快速排序,⼜稱劃分交換排序

1.通過⼀趟排序將要排序的資料分割成獨⽴的兩部分,

其中⼀部分的所有資料都⽐另外⼀部分的所有資料都要⼩

2.然後再按此⽅法對這兩部分資料分別進⾏快速排序,整個排序過程可以遞迴進⾏,以此達到整個資料變成有序序列。

步驟為:

從數列中挑出⼀個元素,稱為"基準"(pivot)

重新排序數列,所有元素⽐基準值⼩的擺放在基準前⾯,所有元素⽐基準值⼤的擺在基準的後⾯(相同的數可以到任⼀邊)。

在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

遞迴地(recursive)把⼩於基準值元素的⼦數列和⼤於基準值元素的⼦

數列排序。

遞迴的最底部情形,是數列的⼤⼩是零或⼀,也就是永遠都已經被排序好了。雖然⼀直遞迴下去,但是這個演算法總會結束,因為在每次的迭代(iteration)中,它⾄少會把⼀個元素擺到它最後的位置去。

# 完成一輪排序過程

def sub_sort

(list_,low,high)

: # 基準數

x = list_[low]

while low < high:

# 後面的數小於x放到前面的空位

while list_[high]

>= x and high > low:

high -=

1 list_[low]

= list_[high] # 將數往前甩

while list_[low]

< x and low < high:

low +=

1 list_[high]

= list_[low]

list_[low]

= x # 將基準數插入

return low

# 快排 low 第乙個數序列號 high 最後乙個數序列號

def quick

(list_,low,high)

:if low < high:

key =

sub_sort

(list_,low,high)

quick

(list_,low,key -1)

quick

(list_, key+

1, high)

#快速排序 方法一

quicker =[7

,12,29

,31,6

,3]quick

(quicker,0,

5)print

(quicker)

def quicksort

(data,start,end)

: i = start

j =end

if i>=j:

return

flag =data[start]

while iwhile i>=flag:

j-=1 temp=data[j]

data[i]

=data[j]

while i<=flag:

i+=1 data[j]

=data[i]

data[i]

=flag

quicksort

(data,start,i-1)

quicksort

(data,i+

1,end)

#方法二的快速排序

data =[45

,3,2

,6,78

,5,33

,22,65

,46]quicksort

(data,0,

len(data)-1

)print

(data)

其實兩種方法的快速排序是一樣的,快速排序的程式挺不好理解的。不常用總忘,筆試面試還考。

這裡引用其他人的程式,我有加了我的方法。以此銘記

python快速排序 兩種方法

快速排序,稱劃分交換排序 1.通過 趟排序將要排序的資料分割成獨 的兩部分,其中 部分的所有資料都 另外 部分的所有資料都要 2.然後再按此 法對這兩部分資料分別進 快速排序,整個排序過程可以遞迴進 以此達到整個資料變成有序序列。步驟為 從數列中挑出 個元素,稱為 基準 pivot 重新排序數列,所...

排序的兩種方法

如果adt需要比較大小,或者要放入collections或arrays進行排序,可實現comparator介面並override compare 函式。第一種 構建乙個新的comparator類,重寫compare 函式,在客戶端直接呼叫靜態函式collections.sort 新的comparat...

List排序的兩種方法

方法一 先定義乙個類,並繼承iconparable介面,在類裡面對compareto方法進行重寫。public class sort test icomparable public string name public int compareto object obj else if this.id...