快速排序算法-Java-单指针和双指针
快速排序算法——Java
单指针快速排序
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arr = {3, -14, 421, 5, 1, 2, 9, 5, 10, 33, 0}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr, int left, int right) { if (left < right) { int temp = method1(arr, left, right); quickSort(arr, left, temp - 1); quickSort(arr, temp + 1, right); } } // 单向指针快速排序 private static int method1(int[] arr, int pointer, int right) { int temp = arr[pointer]; int sp = pointer + 1;// 指针 int bigger = right;// right为当前数组最右边的值 while (sp <= bigger) { if (arr[sp] <= temp) { sp++; } else { swap(arr, sp, bigger); bigger--; } } swap(arr, pointer, 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 One { public static void main(String[] args) { int[] arr = {3, -14, 421, 5, 1, 2, 9, 5, 10, 33, 0}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr, int left, int right) { if (left < right) { int temp = method2(arr, left, right); quickSort(arr, left, temp - 1); quickSort(arr, temp + 1, right); } } // 双向指针快速排序 public static int method2(int[] arr, int left, int right) { int l = left + 1;//左指针,指向当前数组第二个元素 int r = right;//右指针,指向当前数组最后一个元素 int temp = arr[left];//作为比较元素 while (l <= r) { while (l <= r && arr[l] <= temp) l++; while (l <= r && arr[r] > temp) r--; if (l < r) { swap(arr, l, r); } } swap(arr, left, r); return r; } // 数组两元素交换 private static void swap(int[] arr, int a, int b) { int x = arr[a]; arr[a] = arr[b]; arr[b] = x; } }

浙公网安备 33010602011771号