- -我的演算法太差了,看來看去排序演算法還是不會。最近看到了快排,發現很多網站上面的程式碼都不能正確執行,參考了一下他們的程式碼,,其實也差不多,自己再修改一下,我自己測試是可以執行的。
其實快排的原理就是遞迴,先選定一個key,把這個key作為參考值,從右往左遍歷找出比key小的數,從左往右找出比key大的數,然後兩個數交換,當左指標=右指標時,一次排序就完成了,此時陣列被分成了以key為分界線的兩個陣列,再接著對這兩個陣列進行排序。
程式碼如下
1 import java.util.Arrays; 2 3 public class MySort { 4 public static void sort(int[] arr,int low,int high){ 5 //遞迴出口 6 while(low>high){ 7 return ; 8 } 9 int i=low; //左指標 10 int j=high; //右指標 11 int key=arr[low]; //定義key 12 while(i<j){ 13 while(i<j && arr[j]>key){ //從右往左遍歷,找出比key小的值,如果比key大,指標左移 14 j--; 15 } 16 while(i<j && arr[i]<key){ //從左往右遍歷,找出比key大的值,如果比key小,指標右移 17 i++; 18 } 19 if(i<j){ //交換兩個數 20 int t=arr[i]; 21 arr[i]=arr[j]; 22 arr[j]=t; 23 } 24 } 25 //此時陣列被分為兩個以key為分界嶺的兩個陣列,再遞迴排序這兩個子陣列 26 sort(arr,low,i-1); 27 sort(arr,i+1,high); 28 } 29 30 public static void main(String[] args) { 31 int[] a={45,34,67,23,100,98,1,3,2}; 32 sort(a, 0, a.length-1); 33 System.out.println(Arrays.toString(a)); 34 } 35 36 }