快速排序算法——Java
经典代码,数组指针推进一直与第一个元素比较大小,进行移位
不稳定算法
单指针快速排序
public class Main {
public static void main(String[] args) {
int[] arr = { 10, 3, 5, 4, 2, 11, 5 };
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
//快排,递归调用
public static void quickSort(int[] arr, int p, int r) {
if (p < r) {
int q = method1(arr, p, r);
quickSort(arr, p, q - 1);
quickSort(arr, q + 1, r);
}
}
// 单向指针快速排序
private static int method1(int[] arr, int p, int r) {
int pivot = arr[p];
int sp = p + 1;
int bigger = r;
while (sp <= bigger) {
if (arr[sp] <= pivot) {
sp++;
} else {
swap(arr, sp, bigger);
bigger--;
}
}
swap(arr, p, bigger);
return bigger;
}
// 数组两元素交换
private static void swap(int[] arr, int a, int b) {
int x = arr[a];
arr[a] = arr[b];
arr[b] = x;
}
}
双指针快速排序
import java.util.Arrays;
public class _02 {
public static void main(String[] args) {
int[] arr = { 10, 3, 5, 4, 2, 11, 5 };
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr, int p, int r) {
if (p < r) {
int q = method2(arr, p, r);
quickSort(arr, p, q - 1);
quickSort(arr, q + 1, r);
}
}
// 双向指针快速排序
private static int method2(int[] arr, int p, int r) {
int pivot = arr[p];
int left = p + 1;// 左指针
int right = r;// 右指针
while (left <= right) {
while (left <= right && arr[left] <= pivot)
left++;
while (left <= right && arr[right] > pivot)
right--;
if (left < right) {
swap(arr, left, right);
}
}
swap(arr, p, right);
return right;
}
// 数组两元素交换
private static void swap(int[] arr, int a, int b) {
int x = arr[a];
arr[a] = arr[b];
arr[b] = x;
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/289899.html