Java实现快速排序算法(Quicksort)
在本文中,将介绍如何使用Java语言实现快速排序算法。快速排序算法是一种经典的排序算法,其时间复杂度为O(nlogn),其实现方式类似于分治算法,通过选择基准值,将输入序列分为两个子序列,分别对其进行递归排序。
算法原理
快速排序算法被认为是最优秀的排序算法之一,因为它的时间复杂度为O(nlogn),它的核心思想就是分治策略,通过将序列划分为两个子序列进行递归排序。其步骤如下:
- 选择基准值:从序列中选择一个元素作为基准值(pivot)。
- 分割操作:将序列分为两部分,左侧部分中的元素都小于基准值,右侧部分中的元素都大于基准值。
- 递归排序:递归的对左右两个子序列进行排序,直到序列的长度为1。
Java代码实现
public static void quickSort(int[] arr, int low, int high) {
if (arr == null || arr.length == 0) {
return;
}
if (low >= high) {
return;
}
int middle = low + (high - low) / 2;
int pivot = arr[middle];
int i = low, j = high;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (low < j) {
quickSort(arr, low, j);
}
if (high > i) {
quickSort(arr, i, high);
}
}
示例
示例一
假设有一个整数序列{38, 65, 97, 76, 13, 27, 49},我们来演示一下它的排序过程。
- 我们选择中间的数76作为基准值,将序列分为两部分。
左边部分 {38, 65, 13, 27, 49}
右边部分 {97}
-
对左部分进行递归排序:{13, 27, 38, 49, 65}
-
对右部分进行递归排序:{97}
-
合并左右两部分:{13, 27, 38, 49, 65, 76, 97}
示例二
假设有一个字符串序列{"quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"},我们可以很容易的将其转换为大小写不敏感的序列进行排序。
public static void quickSort(String[] arr, int low, int high) {
if (arr == null || arr.length == 0) {
return;
}
if (low >= high) {
return;
}
int middle = low + (high - low) / 2;
String pivot = arr[middle];
int i = low, j = high;
while (i <= j) {
while (arr[i].compareToIgnoreCase(pivot) < 0) {
i++;
}
while (arr[j].compareToIgnoreCase(pivot) > 0) {
j--;
}
if (i <= j) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (low < j) {
quickSort(arr, low, j);
}
if (high > i) {
quickSort(arr, i, high);
}
}
然后我们调用函数进行排序。
String[] arr = {"quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
输出结果为:{brown, dog, fox, jumps, lazy, over, quick, the}
结论
快速排序算法的时间复杂度为O(nlogn),而且常数因子较小,是目前最常用的排序算法之一。在Java中,可以通过递归调用实现快速排序,同时,也可以通过迭代方式实现。无论采用哪种方式,都应该保证合理使用基准值并进行分割操作,才能更好地发挥算法优势。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现快速排序算法(Quicktsort) - Python技术站