Java實現快速排序

2021-08-21 03:52:32 字數 2888 閱讀 3794

一、快速排序的思想

基於分治的思想,是氣泡排序的改進型。首先在陣列中選擇乙個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌(lo指向起始位置,hi指向末尾),首先從後半部分開始,如果發現有元素比該基準點的值小,就交換lo和hi位置的值,然後從前半部分開始掃秒,發現有元素大於基準點的值,就交換lo和hi位置的值,如此往復迴圈,直到lo>=hi,然後把基準點的值放到hi這個位置。一次排序就完成了。以後採用遞迴的方式分別對前半部分和後半部分排序,當前半部分和後半部分均有序時該陣列就自然有序了。

排序過程:

二、下面我們來看乙個具體的例子:

下面我們通過乙個案例來演示一下快速排序的基本步驟: 以序列 46 30 82 90 56 17 95 15   共8個元素

初始狀態:     46  30  82  90  56  17  95  15        選擇46 作為基準值,i = 0, j = 7

i = 0                                j = 7

15  30  82  90  56  17  95  46       15 < 46, 交換 15 和 46,移動 i, i = 1

i = 1                           j = 7

15  30  82  90  56  17  95  46       30 < 46, 不需要交換,移動 i , i = 2

i = 2                   j = 7

15  30  46  90  56  17  95  82       82 > 46, 交換82 和 46,移動 j , j = 6

i = 2               j = 6

15  30  46  90  56  17  95  82       95 > 46, 不需要交換,移動 j , j = 5

i = 2         j = 5

15  30  17  90  56  46  95  82       17 < 46, 交換46 和 17,移動 i, i = 3

i = 3    j = 5

15  30  17  46  56  90  95  82       90 > 46, 交換90 和 46,移動 j , j = 4

3 = i    j = 4

15  30  17  46  56  90  95  82       56 > 46, 不需要交換,移動 j , j = 3

i  =  j = 3

i = j = 3, 這樣序列就這樣分割成了兩部分,左邊部分 均小於 基準值(46);右邊部分 ,均大於基準值。這樣子我們就達到了分割序列的目標。在接著對子序列用同樣的辦法進行分割,直至子串行不超過乙個元素,那麼排序結束,整個序列處於有序狀態。

三、快速排序演算法的實現:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

publicstaticintgetmiddle(intlist,intlow,inthigh)

list[low] = list[high];//比中軸小的記錄移到低端

while(low < high && list[low] <= tmp)

list[high] = list[low];//比中軸大的記錄移到高階

}

list[low] = tmp;//中軸記錄到尾

returnlow;//返回中軸的位置

}

publicstaticvoid_quicksort(intlist,intlow,inthigh)

}

所謂的中軸的位置就是選擇的那個基準數所在的位置。

使用的時候直接呼叫_quicksort方法即可,low為陣列的第乙個元素的下標0,high為陣列的最後乙個元素的下標a.length-1

。 快速排序的時間複雜度為o(nlogn)。

排序 快速排序(java實現)

快速排序是一種非常高效的排序演算法,它採用了 分而治之 的思想,把大的拆分成小的,小的再拆分為更小的。其原理如下 對於給定一組記錄,通過一趟排序後,將原序列分為兩部分,其中前一部分的所有記錄都比後一部分的所有記錄小,然後再依次對前後兩部分的記錄進行快速排序,遞迴該過程,直到序列中所有的記錄均為有序為...

Java實現快速排序

package com.handy.ds public class quicksort for int i 0 i a.length i system.out.print a i system.out.println quicksort qs new quicksort qs.quitsort a,...

java實現快速排序

快速排序是平均速度最快的排序演算法,他的平均時間複雜度 n log n 快速排序採用分治法來進行排序,首先先給出乙個陣列,在一開始隨意選擇乙個數pivot,已pivot作為這個陣列的分界點,把大於pivot的數放在右邊,小於pivot的數放在左邊,然後在已pivot的兩邊分界點,右進行一次上一次的操...