Java实现快速排序算法
时间: 2023-11-07 08:05:06 浏览: 95
快速排序是一种常用的排序算法,其基本思想是将一个待排序的序列分成两个子序列,然后对这两个子序列分别进行排序,以达到整个序列有序的目的。
以下是Java实现快速排序算法的代码:
```
public class QuickSort {
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j) {
while (i <= j && arr[i] < pivot) {
i++;
}
while (i <= j && arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
int temp = arr[left];
arr[left] = arr[j];
arr[j] = temp;
return j;
}
public static void main(String[] args) {
int[] arr = {5, 3, 8, 4, 2};
quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
}
```
在该代码中,`quickSort`方法用于进行快速排序,其中`left`表示待排序序列的左边界,`right`表示待排序序列的右边界。首先判断左边界是否小于右边界,如果是,则进行分区操作,分别对左分区和右分区进行递归调用。
`partition`方法用于进行分区操作,其中`pivot`表示基准值,即待排序序列的第一个元素。`i`和`j`分别表示左侧指针和右侧指针,初始时`i=left+1`,`j=right`。在while循环中,左侧指针向右移动,直到找到一个大于等于`pivot`的元素,右侧指针向左移动,直到找到一个小于等于`pivot`的元素,然后交换这两个元素的位置。最后将基准值和右侧指针所指的元素交换位置,并返回右侧指针的位置。
在`main`方法中,定义一个待排序的整型数组,然后调用`quickSort`方法进行排序,并输出排序后的结果。
该代码的时间复杂度为O(nlogn),空间复杂度为O(logn)。
阅读全文