快速排序算法
快速排序算法的基本思路爲從數組中選擇一個數爲基準數,以後,將比基準數小的數放在左邊,比基準數大的數放在右邊(分爲了兩個區),以後將左邊(小於基準數)與右邊(大於基準數)再次進行上述操做,一直重複直到沒法再分爲止數組
用戶輸入n,使用隨機數產生n個數放入到數組a中dom
調用遞歸方法sort()
code
PS:下面的數組a是全局變量blog
System.out.println("輸入數值個數n:"); Scanner scanner = new Scanner(System.in ); int n = scanner.nextInt(); scanner.close(); a = new int[n+1]; //隨機賦值,留下a[0]存放基準數 for (int i = 1; i < n+1; i++) { a[i]= (int) (Math.random()*100); } //輸出數組a for (int i = 1; i < n+1; i++) { System.out.print(a[i]+" "); } sort(1,n); //輸出排序後的數值 System.out.println(""); for (int i = 1; i <n+1 ; i++) { System.out.print(a[i]+" "); } } public static void sort(int m1,int m2){ int i,j; if(m1<m2){ i=m1; j=m2; a[0]=a[i];//每次的基準數都是傳入分區的第一個數 //當i=j,便是完成了該分區的排序 while (i != j) { //從右邊開始掃描,直到不知足條件(也就是發現了一個數小於基準數,放入到左邊的分區) while(a[j]>=a[0] && j>i){ j--; } if(i<j){ a[i]=a[j]; i++; } //從左邊開始掃描,直到不知足條件(也就是發現了一個數大於基準數,放入到右邊的分區) while(a[i]<=a[0] && j>i){ i++; } if(i<j){ a[j]=a[i]; j--; } } a[i]=a[0];//將以前的基準數賦值給a[i] //i已經存放了基準數,因此以i爲分界線分爲兩個區,繼續遞歸 sort(m1,i-1); sort(i+1,m2); } return; }