双指针快速排序是一种优化的快速排序实现,通过使用两个指针从数组的两端向中间移动,来减少不必要的交换操作,从而提高排序效率。以下是使用双指针实现快速排序的 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;
	}
}
posted on 2025-07-21 15:17  caoshikui  阅读(29)  评论(0)    收藏  举报