快速排序,⼜稱劃分交換排序
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...