以首数字为分界点
private static int[] quick_sort(int[] unsorted) {
int[] sorted = unsorted.clone();
int left = 0;
int right = sorted.length - 1;
_quick_sort(sorted, left, right);
return sorted;
}
private static void _quick_sort(int[] sorted, int left, int right) {
if (left >= right) {
return;
}
int i = left;
int j = right;
int mid = sorted[left];
while (i < j) {
while (sorted[j] >= mid && i < j) {
j--;
}
sorted[i] = sorted[j];
while (sorted[i] <= mid && i < j) {
i++;
}
sorted[j] = sorted[i];
}
sorted[i] = mid;
_quick_sort(sorted, left, i - 1);
_quick_sort(sorted, i + 1, right);
// return sorted;
}
以中间数为分界点
public static void main(String[] args) {
int[] arr = ArrayUtil.getRandomArr(80000);
log.info("排序前");
// System.out.println(Arrays.toString(arr));
int l = 0;
int r = arr.length - 1;
recursionSort(arr, l, r);
log.info("排序后");
// System.out.println(Arrays.toString(arr));
}
private static void recursionSort(int[] arr, int left, int right) {
int l = left;
int r = right;
int pivot = arr[(left + right) / 2];
int temp;
while (l < r) {
while (arr[l] < pivot) {
l += 1;
}
while (arr[r] > pivot) {
r -= 1;
}
if (l >= r) {
break;
}
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
if (arr[l] == pivot) {
r -= 1;
}
if (arr[r] == pivot) {
l += 1;
}
}
if (l == r) {
l++;
r--;
}
// log.info(Arrays.toString(arr));
if (left < r) {
recursionSort(arr, left, r);
}
if (right > l) {
recursionSort(arr, l, right);
}
}
评论前必须登录!
注册