快排演算法的Java實現
阿新 • • 發佈:2018-12-26
快排演算法的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; }