演算法java 簡單實現快速排序

2021-08-25 06:10:55 字數 3605 閱讀 6626

int arr=;

int frist=0;

intlast=9;

第一次迴圈,frist指向arr[0],last指向arr[9]。首先從右開始尋找小於基準數6的元素,last指向arr[7]=5,frist從左尋找大於基準數6的元素,指向arr[3]=7,交換兩個位置的值

int arr=;

int frist=3;

intlast=7;

last繼續向左移動,指向arr[6]=4,frist向右移動,指向arr[4]=9,交換值

int arr=;

int frist=4;

intlast=6;

接下來,last繼續向左移動,指向arr[5]=3,frist向右移動,指向arr[5]=3,frist=last,交換基準數與arr[5]=3位置,至此第一次迴圈結束(左邊全部小於基準數6,右邊全部大於6)。

int arr=;

int frist=5;

intlast=5;

再將陣列以基準數6為中心,分為兩部分,分別作為新的陣列進行排序:

int arr1=;

int arr2=;

2.第二次迴圈

第一部分,新的基準數為3,last,frist分別尋找小於,大於基準數3的元素,交換它們的位置,直至frist=last

//start

int arr=;

int frist=0;

intlast=4;

//第一次交換,frist=last基準數與arr[2]=2交換

int arr=;

int frist=2;

intlast=2;

再將陣列以基準數3為中心,分為兩部分,分別作為新的陣列進行排序:

int arr1=;

int arr2=;

第二部分,新的基準數為9,last,frist分別尋找小於,大於基準數9的元素,交換它們的位置,直至frist=last

//start

int arr=;

int frist=6;

intlast=9;

//第一次交換,frist=8,last=9 arr[9]=8與arr[8]=10交換

int arr=;

int frist=8;

intlast=9;

//第二次交換,frist=last=8 基準數9與arr[8]=8交換

int arr=;

int frist=8;

intlast=9;

再將陣列以基準數9為中心,分為兩部分,分別作為新的陣列進行排序:

int arr1=;

int arr2=;

3.第三次迴圈

第一部分,新的基準數為2,last,frist分別尋找小於,大於基準數3的元素,交換它們的位置,直至frist=last

//start

int arr=;

int frist=0;

intlast=1;

//第一次交換,frist=last基準數與arr[2]=2交換

int arr=;

int frist=2;

intlast=2;

往下同理即可。。。

3.遞迴**實現

public

class quicksort

while (arr[i] <= temp && i < j)

if (i < j)

}if (i == j)

fristbasevalue(arr, frist, i - 1);

fristbasevalue(arr, i + 1, last);

}}

遞迴排序過程

[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]

;frist=0;last=9

[3, 1, 2, 5, 4, 6, 9, 7, 10, 8]

;frist=0;last=4

[2, 1, 3, 5, 4, 6, 9, 7, 10, 8]

;frist=0;last=1

[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]

;frist=0;last=0

[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]

;frist=0;last=-1

[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]

;frist=1;last=0

[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]

;frist=2;last=1

[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]

;frist=3;last=4

[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]

;frist=3;last=3

[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]

;frist=3;last=2

[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]

;frist=4;last=3

[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]

;frist=5;last=4

[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]

;frist=6;last=9

[1, 2, 3, 4, 5, 6, 8, 7, 9, 10]

;frist=6;last=7

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=6;last=6

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=6;last=5

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=7;last=6

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=8;last=7

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=9;last=9

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=9;last=8

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

;frist=10;last=9

測試**

public

void

fristbasevalue() ;

quicksort sort=new quicksort();

sort.fristbasevalue(arr,0,arr.length-1);

}

快速排序java簡單實現

快速排序簡單實現 將陣列的某一段元素進行劃分,小的在左邊,大的在右邊 param a 陣列 param start 開始的位置 param end 結束的位置 return 基準值的位置 public static intdivide int a,int start,int end 上面的while...

排序演算法 快速排序 java實現

它採用了一種分治的策略,通常稱為分治法。分治法思想 將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。對於陣列a,隨機選擇乙個元素作為基準數pos,一般為第乙個元素或最後乙個元素。將該陣列分為兩堆a 0,pos index 1 和 a ...

Java實現快速排序演算法

一 演算法描述 快速排序是對氣泡排序的一種改進。在氣泡排序中,記錄每次都是與相鄰位置上的資料作比較,因此每次只能移動乙個位置。而在快速排序中,記錄的比較和移動都是從兩端向中間進行的。其主要思想 首先在待排序陣列中選取乙個基準值 作為比較物件 然後利用基準值將待排陣列分成2個部分。基準值左邊的陣列的資...