快速排序
队列是排队,先进先出
堆栈是先进后出

快速排序是一种高效的排序算法,其平均时间复杂度为 O(nlogn)。以下是用 Java 实现的快速排序代码示例:
java
public class QuickSort {
public static void quickSort(int[] array, int low, int high) {
if (low < high) {
// 找到分区点
int pivotIndex = partition(array, low, high);
// 递归排序左右子数组
quickSort(array, low, pivotIndex - 1);
quickSort(array, pivotIndex + 1, high);
}
}
private static int partition(int[] array, int low, int high) {
// 选择最后一个元素作为基准
int pivot = array[high];
int i = low - 1;
for (int j = low; j < high; j++) {
// 如果当前元素小于或等于基准
if (array[j] <= pivot) {
i++;
// 交换 array[i] 和 array[j]
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
// 交换 array[i+1] 和 array[high] (基准)
int temp = array[i + 1];
array[i + 1] = array[high];
array[high] = temp;
// 返回分区点的索引
return i + 1;
}
public static void main(String[] args) {
int[] array = {10, 7, 8, 9, 1, 5};
int n = array.length;
quickSort(array, 0, n - 1);
System.out.println("Sorted array: ");
for (int i = 0; i < n; i++) {
System.out.print(array[i] + " ");
}
}
}
代码说明
-
quickSort方法:-
这是递归方法,用于对数组进行排序。
-
参数
low和high分别表示当前子数组的起始和结束索引。 -
如果
low < high,则调用partition方法找到分区点,并递归地对左右子数组进行排序。
-
-
partition方法:-
这个方法用于将数组分区,使得分区点左边的所有元素都小于或等于分区点,右边的所有元素都大于分区点。
-
选择数组的最后一个元素作为基准(pivot)。
-
使用两个指针
i和j,i用于记录小于基准的元素的边界,j用于遍历数组。 -
遍历数组时,如果
array[j]小于或等于基准,则将array[j]与array[i+1]交换,并将i加 1。 -
最后,将基准元素与
array[i+1]交换,返回分区点的索引。
-
-
main方法:-
定义一个待排序的数组
array。 -
调用
quickSort方法对数组进行排序。 -
打印排序后的数组。
-
示例运行
假设输入数组为
{10, 7, 8, 9, 1, 5},程序的输出将是:Sorted array:
1 5 7 8 9 10
注意事项
-
快速排序的性能依赖于分区点的选择。在最坏情况下(例如数组已经有序),时间复杂度会退化到 O(n2)。为了避免这种情况,可以采用随机化分区点或三数取中法等策略。
-
快速排序是一种原地排序算法,不需要额外的存储空间,但它是不稳定的排序算法

浙公网安备 33010602011771号