快排是最常用的一种排序,原理不再赘述,需要注意的点就是取了一个pivot值,最后如果保证pivot值插入中间,而又不涉及太多复杂的操作,这里代码实现没有涉及太多复杂的操作,最终将pivot再存到前后光标重合的位置,就行了
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
int[] i = {1, 32, 54, 454, 3, 254, 654, 24, 65, 23, 87, 3543, 212};
sortArr(i);
System.out.println(Arrays.toString(i));
}
static void sortArr(int[] arr) {
int first = 0;
int last = arr.length - 1;
quicklySort(first, last, arr);
}
static void quicklySort(int fir, int la, int[] arr) {
int mid = getMid(fir, la, arr);
if (fir < mid - 1) {
quicklySort(fir, mid - 1, arr);
}
if (mid + 1 < la) {
quicklySort(mid + 1, la, arr);
}
}
static int getMid(int fir, int la, int[] arr) {
int pivot = arr[fir];
boolean backFlat = true;
while (fir < la) {
if (backFlat) {
if (arr[la] < pivot) {
arr[fir++] = arr[la];
backFlat = false;
} else {
la--;
}
} else {
if (arr[fir] > pivot) {
arr[la--] = arr[fir];
backFlat = true;
} else {
fir++;
}
}
}
arr[fir] = pivot;
return fir;
}
}