把乙個陣列切分成兩個子陣列的基本思想:
找乙個基準值,用兩個指標分別指向陣列的頭部和尾部;
先從尾部向頭部開始搜尋乙個比基準值小的元素,搜尋到即停止,並記錄指標的位置
再從頭部向尾部開始搜尋乙個比基準值大的元素,搜尋到即停止,並記錄指標的位置;
交換當前左邊指標位置和右邊指標位置的元素;
重複2,3,4步驟,直到左邊指標的值大於右邊指標的值停止。
public
static
void
quicksort
(int
arr,
int left,
int right)
int fun =
fun(arr, left, right)
;quicksort
(arr, left, fun -1)
;quicksort
(arr, fun +
1, right);}
/** * 對陣列,從索引lo到索引hi之間的元素進行分組並返回分組界限對應的索引
** @param arr
* @param left
* @param right
*/public
static
intfun
(int
arr,
int left,
int right)
while
(l <= r)
//交換
if(l >= r)
break
;else
exchage
(arr, l, r);}
//把左邊第乙個元素和r索引交換
exchage
(arr, left, r)
;return r;
}/**
* 交換元素
** @param arr
* @param i
* @param j
*/public
static
void
exchage
(int
arr,
int i,
int j)
速度 演算法第二章 快速排序
先把快速排序的 實現貼上來,太晚了,過程改天再加上!快速排序就是把乙個數拿出來,然後把小於這個數的扔到一邊,把大於它的扔到一邊,那這個數就在正確的位置上了 然後把這個數的左邊分成乙份,右邊分成乙份,再把這兩份進行剛才的做法,一直不停地這樣做,直到不能再分。接下來就要說明怎麼把小於它的數扔到一邊,大於...
第二週(快速排序)
通過找出乙個基準數,然後從左向右,從右向左依次找出比這個基準數大 小 的數字,然後交換它倆,最後將基準數與每輪判斷的結尾處交換,這樣每輪結束後,剛剛排序的部分都會被分成兩部分,在基準數左邊的數字都比基準數小,在基準數右邊的數字都比基準數大,然後不斷二分下去,最後整體排序完成 此方法主要運用了遞迴與二...
簡談快速排序演算法 Java
快速排序是常用排序中的一種,其時間複雜度在理想狀態下可以達到o logn 在一些需要高效處理排序的時候經常用到.原理是將陣列中第乙個作為基數,然後將剩下的數分成兩個區,左邊的是小於基數值的數,右邊的大於基數值的數.將基準值放中間.然後利用遞迴將分開的兩個區做同樣的操作,直到完成排序 快速排序 par...