写一个java快速排序
以下是一个Java快速排序的实现:
public class QuickSort {
public static void main(String[] args) {
int[] arr = {10, 7, 8, 9, 1, 5};
int n = arr.length;
quickSort(arr, 0, n-1);
System.out.println("Sorted array:");
for (int i=0; i<n; ++i)
System.out.print(arr[i]+" ");
}
static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi-1);
quickSort(arr, pi+1, high);
}
}
static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j=low; j<high; ++j) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return i+1;
}
}
在这个实现中,我们使用了递归的方式来实现快速排序。在 quickSort 方法中,我们首先计算出一个 pivot 值,并调用 partition 方法将数组划分为两个部分。然后我们再对左侧部分和右侧部分进行递归调用 quickSort 方法,直到排序完成。
在 partition 方法中,我们首先将 pivot 值设为数组的最后一个元素。然后我们用 i 来标记小于 pivot 的元素的位置,初始值为 low - 1。我们从 low 到 high-1 遍历数组,如果当前元素小于 pivot,我们就将 i 的值加一,并将当前元素与 arr[i] 交换。最后,我们将 arr[i+1] 和 arr[high] 交换,并返回 i+1。这样就完成了一次划分。
原文地址: https://www.cveoy.top/t/topic/bqgy 著作权归作者所有。请勿转载和采集!