1.基本思路
就是選定乙個基準數,然後從兩端開始同時像中間探測,如果是要公升序排序,且選定第乙個為基準數的話,則當後面探測到比基準數小的就停下,然後就讓前面的走,前面當探測到比基準數大的就停下,然後交換,最後兩個探測針相遇時,就跳出迴圈,並且讓基準數放到中間去。
2.注意事項:
①注意,在讓前面和後面探測針探測的迴圈中,迴圈條件要時刻保證,前面探測的小於後面探測針(一定要小於!!不可以是i!=j,否則可能會越過等於的條件,然後繼續迴圈下去),即就是無論是前面進行探測還是後面進行探測還是進行交換時,都要保證,前面探測的小於後面探測針,即進行任何乙個迴圈時,都要加上條件 i②最後記得要歸為基準數,就是要把基準數放在中間,即和相遇的那個元素交換
③當將一組資料進行全排列時,注意要再最後進行遞迴,就是排完一次二分後,繼續呼叫這個快排函式,將左右排好的繼續排
④一定要讓非基準數的那一邊先探測!!!因為有基準數的那一邊,算上基準數其實就是已經先走了一步了,所以假如讓基準數的那一邊先走的話,最後非基準數的那一端就會少探測了乙個!!!
3.**實現
#include
int a[
101]
,n;//定義全域性變數,這兩個變數需要在子函式中使用
void
quicksort
(int left,
int right)
}//最終將基準數歸位
a[left]
=a[i]
; a[i]
=temp;
quicksort
(left,i-1)
;//繼續處理左邊的,這裡是乙個遞迴的過程
quicksort
(i+1
,right)
;//繼續處理右邊的,這裡是乙個遞迴的過程
}int
main()
可以輸入以下資料進行驗證
1061
2793
45108
結果
123
4567
8910
快速排序(啊哈演算法)
include include using namespace std int a 101 n void quicksort int left,int right quicksort 1,n for i 1 i n i while arr i temp ii 這裡兩個while的順序是不能改變的,想...
快速排序(啊哈演算法)
include include using namespace std int a 101 n void quicksort int left,int right quicksort 1,n for i 1 i n i while arr i temp ii 這裡兩個while的順序是不能改變的,想...
啊哈演算法之快速排序
快速排序之所以比較快,是因為相比氣泡排序,每次交換是跳躍式的。每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊。這樣在每次交換的時候就不會像氣泡排序一樣只能在相鄰的數之間進行交換,交換的距離就大得多了。因此總得比較和交換次數就少了。速度...