spring基於XML的申明式事務控制
阿新 • • 發佈:2020-07-30
原始資料如上,並且設定兩個指標,以及一個基準pivot = 4(這裡採用首元素為基準,基準可以是隨機一個元素)。
在第一次迴圈中,從right指標開始,讓指標指向的元素與基準元素比較,指標指向元素大於等於基準元素時,指標向左移動一位;否則,指標right停止移動,切換到left指標。left指標指向的元素如果小於等於基準元素,指標向右移動,否則指標停止移動,讓left指標指向的元素與right指標指向的元素進行交換。當left與right指向同一個位置時,將該與元素與基準元素交換位置。
在上面數列中1<4,所以right指標停止移動,切換到left指標,然後進行下一步比較,4=4,所以left指標向右移動,7>4,所以將left指標停止移動,並且將left和right指標指向的元素交換。接下來繼續進行下一輪的迴圈。流程大致如下:
程式碼實現如下:
public static void quickSort(int[] arr,int left,int right){ int i,j,pivot; //遞迴結束條件 if(left>=right){ return; } i=left; //左指標 j=right; //右指標 //pivot就是基準位 pivot = arr[left]; while (i<j) { //先看右邊,依次往左遞減while (pivot<=arr[j]&&i<j) { j--; } //再看左邊,依次往右遞增 while (pivot>=arr[i]&&i<j) { i++; } //如果滿足條件則交換 if (i<j) { int temp = arr[j]; arr[j]= arr[i]; arr[i] = temp; } } //最後將基準為與i和j相等位置的數字交換 arr[left] = arr[i]; arr[i] = pivot; //遞迴呼叫左半陣列 quickSort(arr, left, j-1); //遞迴呼叫右半陣列 quickSort(arr, j+1, right); }