基本思想:
該方法太浪費空間,需要許多空間
改進如下:只需要乙個額外的位置
依此將後續的值與所選界點進行比較
比界點大的不移動(low++或high–),比界點小的移動到前面
前面有空,從後面移動乙個比界點大的;
後面有空,從前面移動乙個比界點小的。
當low = high 時不用繼續了,並將 0 號位置的中心點放到該位置上
此時被分成了兩個子表,分別繼續重複操作
**實現
此**又對上述進行優化,沒有乙個空位置,直接將兩個值與基準數(界點)比較
//從大到小排序
void
quicksort
(int b,
int* pcount,
int left,
int right)
temp = b[left]
;//temp中存的就是基準數
i = left;
j = right;
while
(i != j)
while
(b[i]
>= temp && i < j)
//再找左邊的
if(i < j)
//交換兩個數在陣列中的位置
}//最終將基準數歸位
b[left]
= b[i]
; b[i]
= temp;
quicksort
(b, pcount, left, i -1)
;//繼續處理左邊的,這裡是乙個遞迴的過程
quicksort
(b, pcount, i +
1, right)
;//繼續處理右邊的 ,這裡是乙個遞迴的過程
}int
main()
;int count =0;
int i;
int n =10;
quicksort
(a,&count,
0, n -1)
;//快速排序呼叫
//輸出排序後的結果
for(i =
0; i < n; i++
)printf
("\n一共交換了%d次\n"
, count)
;return0;
}
資料結構與演算法 排序演算法 快速排序
源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...
資料結構與演算法 快速排序
基礎概念 快速排序,聽這個名字就能想到它排序速度比較快方法,是一種分治思想。所謂分治,就是指以乙個數為基準,將序列中的其他數往它兩邊 扔 以從小到大排序為例,比它小的都 扔 到它的左邊,比它大的都 扔 到它的右邊,然後左右兩邊再分別重複這個操作,不停地分,直至分到每乙個分割槽的基準數的左邊或者右邊都...
資料結構與演算法 快速排序
快速排序在實際應用中使用廣泛,效果也高。快排使用的是分治策略,一組序列基於某乙個基準值分成兩個大小的子串行,遞迴排序子串行,最終得到有序的序列。快排的平均時間複雜度為o nlogn 演算法的實現步驟 1.在序列中挑選乙個基準值,我們可以預設第乙個數為基準值 2.從兩邊的數值跟基準值作對比,數值小的放...