快速排序-java

段雪鋒發表於2018-04-28

為了解決凸包問題,儘量降低時間複雜度,寫了一個快速排序演算法。

此快排演算法的主要過程是:

1.選擇陣列第一個數作為基準X

2.從右往左找第一個比X小的數,放到X所在的位置,留出一個空

3.從左往右找第一個比X大的數,放在剛才空出的位置,留出一個空

4.從右往左找第二個比X小的數,放到上一個空位置,再次留出一個空

5.如此迴圈,直到左右相遇,把X放在最後一個空位

6.此時,X左邊都是比X小,右邊都比X大,對左右兩邊分別遞迴計算。

注意: 此演算法遞迴,陣列要大於3;一定要指定遞迴退出的條件。

public class QuickSort {
	public void qs(int[] a,int c,int b){
		
		int x=a[c];
		int i=c;
		int j=b;
		if(c<b){               //此處為遞迴的退出條件
			while(i<j){
				while(i<j&&x<a[j]){ //從右往左找比基準大得數
					j--;
				}		
				a[i]=a[j];
				
				while(i<j&&x>=a[i]){
					i++;
				}
				a[j]=a[i];
				
			}
			a[i]=x;
		
		qs(a,c,i-1);
		qs(a,i+1,b);
		}
	
	}
}

相關文章