1. 程式人生 > >快排演算法的Java實現

快排演算法的Java實現

快排演算法的Java實現

快排的核心是找到在無序陣列中找到一個數,然後將比他小的數字放在他的左邊,比他大的數字放在他的右邊。然後遞迴的對左右兩邊進行繼續排序,直到完成,下面看演算法的實現:

public static void sort(int a[], int start, int end) {

	if (start >= end) {
		return;
	}
	//獲取到已經排好序的數字,左邊數字都比他小,右邊都比他大。
	int flag = getFlag(a, start, end);
	sort(a, start, flag - 1);
	sort(a, flag + 1, end);

}

private static int getFlag(int[] a, int start, int end) {
	int begin = start;
	int over = end;
	//選取第一個為目標數字。
	int num = a[start];
	int flag = start;

	while (begin < over) {
		//從左找到第一個比目標數字大的。
		while (begin < end && a[begin] <= num){begin++;} 
		//從右找到第一個比目標數字小的。			
		while (over > start&& a[over] >= num){over--;}
		//如果begin小於end且值大於,則互動兩個數字。
		if(begin < over&&a[begin] > a[over]) swap(a, begin, over);
	}
	//交換目標數字與上面迴圈完的數字的位置。
	swap(a, over, flag);
	return over;
}

private static void swap(int[] a, int begin, int end) {
	int temp = a[begin];
	a[begin] = a[end];
	a[end] = temp;
}