快速排序的個人理解 python

2021-10-04 06:31:30 字數 1773 閱讀 5302

快排作為面試過程中的常考題,有必要好好整理以下。快排與我前面寫的歸併排序一樣,都採用了分治策略。但是它不使用額外的儲存空間,不過代價是,列表有可能不會一分為二(這個我們留到後面演算法分析時具體說一下)。

快排原理:首先選定乙個基準值,基準值的作用就是幫助列表進行切分。也就是將該基準值作為列表的分割點,分割點的左部分都小余基準值,右部分都大餘基準值。

看**比較來的實際:

def quicksort(alist, l, r):

if l=value:#如果右部分的值小於基準值,往左移動

r -=1

# 當有值小於基準值時,直接覆蓋到左部分的對應位置。因為左邊第乙個值作為基準值並賦給了變數value

#就相當與左邊空了乙個位置出來,可以用來裝填右部分小於基準值的元素。另外一邊同理。

alist[l]=alist[r]

while l演算法分析:快排的切分跟前面說到的歸併排序一樣,都需要進行

那有沒有改進方法勒?必須的,作為乙個想找工作的人,必須把這些安排的明明白白:

有人提出該隨機獲得乙個low與high之間的數作為基準值,這樣就不容易出現這樣的情況,這被稱為隨機選取樞軸法。應該說,這在某種程度上,解決了對於基本有序的序列快速排序時的效能瓶頸。

import random

def quicksort(alist, l, r):

if l=value:#如果右部分的值小於基準值,往左移動

r -=1

# 當有值小於基準值時,直接覆蓋到左部分的對應位置。因為左邊第乙個值作為基準值並賦給了變數value

#就相當與左邊空了乙個位置出來,可以用來裝填右部分小於基準值的元素。另外一邊同理。

alist[l]=alist[r]

while l但是,隨機數就是乙個概率事件,要是我們產生的數對應的值很小或者很大了,一樣也不能解決最壞複雜度的問題。

再改進,於是就有了三數取中(median-of-three)法。即取三個關鍵字先進行排序,將中間數作為樞軸,一般是取左端、右端和中間三個數,也可以隨機選取。這樣至少這個中間數一定不會是最小或者最大的數,從概率來說,取三個數均為最小或最大數的可能性是微乎其微的,因此中間數字於較為中間的值的可能性就大大提高了。由於整個序列是無序狀態,隨機選取三個數和從左中右端取三個數其實是一回事,而且隨機數生成器本身還會帶來時間上的開銷,因此隨機生成不予考慮。

這個時候我們只需要將隨機生成改為選取left、right、mid=(left+(right-left)>>1)中的中間值。將其對應的陣列值作為分割值。

#將上面**中

temp=random.randint(left, right)

alist[temp],alist[left]=alist[left],alist[temp]

修改為:

mid=left+((right-left)>>1)

#兩個值進行比較,保證兩者直接靠左邊的值最小,這樣就能保證alist[left]為中間值

if (alist[left]>alist[right]):

alist[left],alist[right]=alist[right],alist[left]

if (alist[mid]>alist[right]):

alist[mid],alist[right]=alist[right],alist[mid]

if (alist[mid]>alist[left]):

alist[mid],alist[left]=alist[left],alist[mid]

其實,這個還可以優化,夜已深,留著下次吧。哈哈啊哈哈哈哈哈。

快速排序演算法的遞迴實現的個人理解

關於快速排序,該演算法實現原理是將要排序的一組資料根據乙個被選中的資料,以這個資料為中心將資料分成兩側,一側大一側小,使用遞迴,將分好的兩組資料分別進行再次分組,直至不能再分,這時排序則排序完畢。因此快速排序演算法的中心應該是如何根據選中的資料將資料分成兩組,而這裡這個選中的資料則直接預設為資料組的...

python快速排序的原理 理解快速排序演算法

快速排序的時間複雜度為o nlogn 空間複雜度為o n 根據 張小牛 的文章快速排序 quick sort 詳解,證明最優的排序演算法,其時間複雜度可為o nlogn 對應的空間複雜度可為o n 快速排序可實現理論最優效率,這可能是快速排序比較重要的原因吧。我們基於python學習寫一下快速排序吧...

快速排序演算法實現思想個人理解

一.概述 二.原理 三.快速排序的優化 3.2優化不必要的交換 四.對小陣列的優化 五.快速排序完整 include include using namespace std define maxsize 10 define n 9 define max length insert sort 7 快速...