快速排序(python)

2021-09-12 17:51:10 字數 922 閱讀 8359

基於前面介紹的桶排序和氣泡排序的缺點,我們提出了快速排序,快速排序是以首個數字作為基準,將整個輸入分為兩部分,左邊小於這個基準,右邊大於這個基準;重複操作這個,就可以根據這個基準不斷進行劃分輸入資料,最終會實現分類的功能

一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第乙個小於key的值a[j],將a[j]和a[i]互換;

4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換;

5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

1 def quicksort(array, start, end):

2 key = array[start]

3 i, j = start, end

4 if start >= end:

5 return

6 while i != j:

7 # 找到右邊第乙個小於基準的數

8 while (array[j]>=key) and (i快速排序在每次交換的過程中不會向氣泡排序一樣只能在相鄰的數之間進行交換,交換的距離就大得多了,因此總的比較和交換的次數就變少了,速度自然就提高了;當然在最壞的情況下,仍然是相鄰的兩個數進行交換,因此快速排序的最壞最壞時間複雜度和氣泡排序是一樣的,都是o(n*2),它的平均時間複雜度是o(nlogn)

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

排序 快速排序 Python

快速排序 快排 是非常常用的排序方法,在技術面試中出現頻率也特別高。它主要採用交換和分治的策略進行排序。是不穩定排序。步驟 1 在序列中選乙個元素作為劃分的基準元素 pivot 2 將所有不大於pivot的數字放在pivot的前面,大於pivot的數字放在pivot的後面 3 以pivot為界,對前...

python快速排序

coding utf 8 class quicksort def sort self,list,left,right 開始位置小於 位置 if left 取到中間的乙個下標值 s list left right 2 i 0 i left j 下標結束 j right while true 從開始位置...