題目: 數組 arr[6,1,3,7,9,8,5,4,2],用快速排序進行升序排序.
import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一輪:以0索引為基準數,確定基準數在數組正確的位置,* 比基準數小的放到左邊,比基準數大的放在右邊,* 以此類推*/int [] arr={6,1,3,7,9,8,5,4,2};/*調用方法:* 參數:排序數組,起始索引,結束索引*/quickSort(arr,0,arr.length-1);//輸出打印for (int k = 0; k < arr.length; k++) {System.out.print(arr[k]+" ");}}public static void quickSort(int [] arr,int i,int j){//start,end確定查找范圍int start=i;int end =j;//作用是結束掉遞歸if(start>end){return;}//基準數賦值int baseNumber=arr[i];//利用循環找到需要交換的數字while(start!=end){//利用end,從結束索引開始往前找,找比基準數小的while(true){if (start>=end||arr[end]<baseNumber){break;}end--;}while(true){//利用start,從結束索引開始往前找,找比基準數大的if (start>=end||arr[start]>baseNumber){break;}start++;}//把start,與end的元素進行交換int temp=arr[start];arr[start]=arr[end];arr[end]=temp;}//當start與end同時指向同一個數時,循環結束//結束完成后,需要把基準數和star與end同時指向的位置進行交換int temp=arr[i];arr[i]=arr[start];arr[start]=temp;/*此時,i為0,end為基準數位置* 再把基準數左邊和右邊分別進行相同的計算* 確定左邊起始位為數組起始索引0,結束位為end-1* 確定右邊起始位為start+1,結束位為數組結束索引*/quickSort(arr,i,end-1);quickSort(arr,start+1,j);}}
1.把第一個數當做基準數,運用2個指針start與end 一個從前往后,一個從后往前.
2.當start遇到比基準數大的數時,當end遇到比基準數小的數時,就交換位置.
(提醒:一定要先寫end指針,不能先寫start指針,不然會結果錯誤)
3.最后在用基準數與end,start同時指向的元素換位置
4.后面利用遞歸把基準數2邊,重新看成2個新數組進行相同操作
結果:
?記錄自己學習過程中的一些喜歡的程序