快速排序分析

2021-07-08 09:19:42 字數 1950 閱讀 6172

一直想研究一下快速排序,今天剛好有空,寫一下自己對快速排序的認識。

快速排序由於排序效率在同為o(n*logn)的幾種排序方法中效率較高,因此經常被採用。

該方法的基本思想是:

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

雖然快速排序稱為分治法,但分治法這三個字顯然無法很好的概括快速排序的全部步

驟。因此我的對快速排序作了進一步的說明:挖坑填數+分治法:

先來看例項吧,定義下面再給出(最好能用自己的話來總結定義,這樣對實現**會有

幫助)。

給出乙個陣列a[10]   定義參考值temp = a[0]      i = 0  j = 9

i移動判斷條件是(a[i]<=temp && i(

a[i]>=temp && i

a[9] < temp  j = 9 不移動

去移動i  直到a[2] > temp 

交換a[i]  a[j] 

然後j 繼續移動 找到a[8] < temp

i開始移動 找到a[3] > temp

交換a[a]  a[j]

移動j  a[7] < temp   移動 i  a[5] > temp

交換a[i] a[j]

移動j  a[5] < temp  j=5  此時 i = j

將a[0]  與  a[5]  交換

初次排序已經完成,接著再分別按照上述方法將a[0] ~ a[4]   a[6] ~ a[9]進行排序。

給出**,可以參考**理解。

#include 

inta[101],n;

//定義全域性變數,這兩個變數需要在子函式中使用

void

quicksort(

intleft,

intright)  } 

//最終將基準數歸位

a[left]=a[i]; 

a[i]=temp; 

quicksort(left,i-1);//繼續處理左邊的,這裡是乙個遞迴的過程

quicksort(i+1,right);//繼續處理右邊的 ,這裡是乙個遞迴的過程

} int

main()  

快速排序分析

1.開篇 終於還是忍不住要學習一下演算法啦,該面對的還是要面對,不能逃避,不能把已經會的技能忘掉,那是一種對生命的摧殘和不仁。不要怕,只要每天都在進步,水滴石穿,終有破雲見天日的時刻。感慨寫完了,回到正題,分析快速排序。2.原理 假設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣...

快速排序分析

首先簡單描述一下快速排序 1.快速排序樹不穩定的 由於關鍵字的比較與交換是跳躍進行的 2.時間複雜度為o n logn 最好情況為n logn 若陣列基本有序為n n 3.空間複雜度為logn 主要是遞迴造成的棧空間的使用,最好情況,遞迴樹的深度為log2n,其空間複雜度也就為o logn 最壞情況...

快速排序分析

前言 剛剛學習到快速排序,快速排序是個基礎問題,去網上查了下,發現竟然沒有乙個讓人滿意的答案。就連為什麼快速排序比氣泡排序快這個基本的概念,也沒人說清楚。一般而言,網上對於為什麼快速排序比冒泡快,有兩種方向 1.算時間複雜度 2.二分法的優越性 對於這兩種解釋,明顯沒有從根本上觸及原理。對於1.算時...