快速排序是一种基于分治思想的排序算法,具体实现如下所示:
public class QuickSort {
public static void quickSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
quickSort(arr, 0, arr.length - 1);
}
private 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);
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[low];
int i = low + 1;
int j = high;
while (i <= j) {
if (arr[i] <= pivot) {
i++;
} else if (arr[j] > pivot) {
j--;
} else {
swap(arr, i, j);
i++;
j--;
}
}
swap(arr, low, j);
return j;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {5, 2, 8, 9, 1, 3};
quickSort(arr);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
以上代码实现了快速排序算法,通过递归调用实现了分治过程。在quickSort()
方法中,首先判断数组是否为空或者只有一个元素,若是则直接返回;否则,选择一个基准值(一般取数组的第一个元素),然后调用partition()
方法将数组分为两部分,并返回基准值的最终位置。然后再分别对左右两部分进行递归调用,直到每个子数组只有一个元素为止。
在partition()
方法中,设置两个指针i
和j
,分别指向子数组的第一个和最后一个元素。然后进行循环,若arr[i]
小于等于基准值,则将i
指针右移一位;若arr[j]
大于基准值,则将j
指针左移一位;若arr[i]
大于基准值且arr[j]
小于等于基准值,则交换arr[i]
和arr[j]
的值,并将i
和j
同时移动一位。最后将基准值与arr[j]
交换,返回j
作为基准值的最终位置。
最后,在main()
方法中调用quickSort()
方法对数组进行排序,并打印排序后的结果。