python快速排序 兩種方法

2021-09-27 02:21:25 字數 1451 閱讀 7658

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

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 i=flag:

j-=1

temp=data[j]

data[i] =data[j]

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

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

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...