双指针快速排序是一种优化的快速排序实现,通过使用两个指针从数组的两端向中间移动,来减少不必要的交换操作,从而提高排序效率。以下是使用双指针实现快速排序的 Java 代码示例:
public class QuickSortDoublePointer {
public static void main (String[] args) {
int[] arr = {10, 7, 8, 9, 1, 5};
quickSort(arr, 0, arr.length - 1);
System.out.println("Sorted array: " + Arrays.toString(arr));
}
public static void quickSort(int[] arr, int low, int high) {
if (low <= high) {
// 找到基准元素的最终位置
int pivotIndex = partition(arr, low, high);
// 递归地对基准元素左边的子数组进行排序
quickSort(arr, low, pivotIndex - 1);
// 递归地对基准元素右边的子数组进行排序
quickSort(arr, pivotIndex + 1, high);
}
}
public static int partition(int[] arr, int low, int high) {
// 选择最右边的元素作为基准
int pivot = arr[high];
// 初始化两个指针
int left = low;
int right = high - 1;
while (left <= right) {
while (left <= right && arr[left] < pivot) {
left++;
}
while (left <= right && arr[right] >= pivot) {
right--;
}
// 如果左指针小于右指针,交换两个元素
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left ++;
right --;
}
}
// 将基准元素放到正确的位置
int temp = arr[left];
arr[left] = arr[high];
arr[high] = temp;
// 返回基准元素的最终位置
return left;
}
}
浙公网安备 33010602011771号