演算法學習之路,排序之快速排序(Java實現)

2021-09-19 09:39:20 字數 1023 閱讀 6633

快速排序思路:首先是定義乙個變數key,把陣列的第乙個元素的值賦給key,然後定義兩個變數start,end指向陣列的第乙個元素和最後乙個元素。然後從後往前遍歷,一直end--,知道下標為end的值小於key,就交換下標為start,end的值,然後再從前遍歷,一直start++,直到下標為start的值大於key,就交換下標為start,end的值。這樣,經過一次排序之後,小於key的出現在key的左邊,大於key的出現在key的右邊。然後再用遞迴對key的左右兩邊進行上述方法進行排序。

//判斷陣列是否為空,陣列元素是否為0

if (data.length < 1 || data == null)

//頭指標小於尾指標,則返回

if (start >= end)

//陣列不為空且元素個數大於0

boolean flag = true;

int low = start;

int high = end;

int key = data[low];

while (low < high) else

} else else

}}soft_quick(data, start, low - 1);

soft_quick(data, high + 1, end);

int temp = data[start];

data[start] = data[end];

data[end] = temp;

for (int index : data)

system.out.println();

最後是執行結果:

演算法學習之快速排序

快速排序在平均狀況下時間複雜度o nlogn 快速排序法是氣泡排序的進化版本,在最差情況下他們的時間複雜度是一樣的 o n2 但是在平均狀況下其時間複雜度較氣泡排序更低,快速排序是一種不穩定的演算法。快速排序演算法的思想 上圖有長度不相同次序混亂的條形圖 可看作陣列中大小不同的資料 選擇任意乙個位置...

排序演算法學習 快速排序

快速排序 作為氣泡排序的一種改進 通過設定乙個標誌值 通常為陣列第乙個元素pivot 一次快排將陣列分成兩個部分,一部分 公升序 前一部分 小於標誌值pivot,另一部分大於標誌值 公升序 後面部分 各部分內部可以是 通常也是 無序的。通過遞迴地呼叫這樣的排序,使得最終陣列所有的元素有序。一次具體的...

排序演算法學習 快速排序

今天演算法實驗重新學習了快速排序演算法,對此有了一些理解,把它記錄在此以供日後學習。如下為快速排序演算法的被呼叫部分。int get loc int arr int low,int high arr low arr i arr i temp return i 返回基準位置 演算法本質是從後往前與從前...