快速排序及c 實現

2021-08-07 16:19:28 字數 1009 閱讀 5863

乙個暑假的閒暇,玩的是舒服了,可是腦子裡的各種演算法卻忘了,果然程式設計是個靠保持狀態的活,昨天覆習了便快排,拿出來寫個部落格加深個印象。

簡介:快排是基於分治模式的,它的平均時間複雜度為o(nlgn),最壞複雜度是o(n*n)。

思想:快排的其基本思想是,陣列中先隨機找個主元(pivot element),而將比主元小的數全放在主元左邊,比主元大的數放主元右邊,然後再將這個陣列根據主元拆分成左右兩個陣列,再根據上步驟進行排序拆分,直到所有拆分出的陣列只有乙個元素,即拆無可拆,也就是排序好了。

演算法導論給出的偽**是:

quicksort(a,p,r)

if pa,p,r)

quicksort(a,p,q-1)

quicksort(a,q+1,r)

partition(a,p,r)

x=a[r]

i=p-1

for j = p to r-1

do if

a[j]<=x

then i=i+1

exchange a[i]=a[j]

exchange a[i+1] a[r]

return i+1

其中偽**中的「=」其實是左箭頭,因為打著麻煩就換成」=」。

函式quicksort是遞迴式,partition 是具體的排序過程。

這裡就直接講解partition排序過程,其中主元它用的是陣列最後一位,然後設定乙個下標i=p-1即陣列頭的前一位,然後再遍歷陣列a[i],當遇到比主元小的,就讓i右移並讓i的元素與對比出的比主元小的元素置換,這樣遍歷完整個陣列後,就是把所有比主元小的元素全部移到了i的後邊,而比主元大的就在i的右邊。

根據這個原理再實現到c++上:

static void quicksort(int a,int s,int e)

j++;

} quicksort(a,s,i-1);

quicksort

a,i+1,e); } }

快速排序及C 實現

1.挑選乙個基準值 2.小於基準值的數放在大於基準值的數的左邊 3.將基準值放入中間,即兩種數分界的地方,根據挑選的基準值決定如何插入。4.此時,基準值左邊的區間小於等於基準值,基準值小於等於右邊的區間,這三段有序,但內部無序,所以,將基準值左右兩端繼續進行快速排序,直到區間長度為1。是乙個遞迴的過...

快速排序原理及C 實現

原理 快速排序,說白了就是給基準資料找其正確索引位置的過程.如下圖所示,假設最開始的基準資料為陣列第乙個元素23,則首先用乙個臨時變數去儲存基準資料,即tmp 23 然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌 low指向起始位置,high指向末尾.首先從後半部分開始,如果掃瞄到的值大於基準資料就讓...

快速排序思想及C 實現

ste p1.step 1.step1.通過一趟排序把資料分成兩部分,其 中 color 其中一部分的所有資料都要比另一部分的所有資料小,基準資料 稱為樞軸 排在這兩個子串行的中間 s te p2.step 2.step2.對這兩個子串行遞 歸 color 遞迴地呼叫排序演算法 int partit...