java的快速排序怎么写?
时间: 2023-09-08 11:04:54 浏览: 88
### 回答1:
Java的快速排序可以通过以下代码实现:
```java
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int pivot = partition(arr, left, right); // 获取基准点
quickSort(arr, left, pivot - 1); // 对左边的子数组进行快速排序
quickSort(arr, pivot + 1, right); // 对右边的子数组进行快速排序
}
}
private static int partition(int[] arr, int left, int right) {
int pivot = arr[left]; // 选择第一个元素作为基准点
while (left < right) {
while (left < right && arr[right] >= pivot) {
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] <= pivot) {
left++;
}
arr[right] = arr[left];
}
arr[left] = pivot; // 将基准点放回数组
return left;
}
```
其中,`quickSort`方法是快速排序的入口,它使用递归方式对数组进行分割和排序。`partition`方法是获取基准点的过程,它使用双指针的方式对数组进行遍历和交换。具体来说,`partition`方法将数组分成两部分,左边部分的所有元素小于等于基准点,右边部分的所有元素大于等于基准点。最后,`partition`方法将基准点放回数组,并返回基准点的下标。
### 回答2:
快速排序是一种常用的排序算法,它基于分治的思想。
快速排序的步骤如下:
1. 选择一个基准元素,可以是数组中的任意一个元素。一般选择第一个元素作为基准元素。
2. 将数组分成两部分,使得左边的元素都小于等于基准元素,右边的元素都大于基准元素。
3. 对左右两部分分别递归地进行快速排序,直到每部分只有一个元素或为空。
4. 最后将左右两部分的结果合并,得到排序好的数组。
以下是Java代码实现快速排序:
```java
public class QuickSort {
public static void quickSort(int[] arr, int start, int end) {
if (start < end) {
int pivotIndex = partition(arr, start, end); // 获取基准元素的位置
quickSort(arr, start, pivotIndex - 1); // 对基准元素左边的子数组进行快速排序
quickSort(arr, pivotIndex + 1, end); // 对基准元素右边的子数组进行快速排序
}
}
public static int partition(int[] arr, int start, int end) {
int pivot = arr[start]; // 选择第一个元素作为基准元素
int left = start + 1; // 左指针
int right = end; // 右指针
while (left <= right) {
// 左指针找到大于基准元素的位置
while (left <= right && arr[left] <= pivot) {
left++;
}
// 右指针找到小于等于基准元素的位置
while (left <= right && arr[right] > pivot) {
right--;
}
// 交换左右指针指向的元素
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
// 将基准元素放到正确的位置
int temp = arr[start];
arr[start] = arr[right];
arr[right] = temp;
return right; // 返回基准元素的位置
}
public static void main(String[] args) {
int[] arr = {5, 2, 9, 3, 7, 6, 1, 8, 4};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
这是一个简单的快速排序实现,时间复杂度为O(nlogn)。首先选择第一个元素作为基准元素,通过partition函数将数组分成两部分,然后递归地对两部分进行快速排序。最后将排序好的左右两部分合并即可得到整个数组的排序结果。
### 回答3:
快速排序是一种常用的排序算法,它的实现思想是通过分治的方式将问题逐步缩小,直到问题规模足够小,然后再进行合并,最终得到有序的结果。下面是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);
}
}
public 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++;
swap(array, i, j);
}
}
swap(array, i + 1, high);
return i + 1;
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) {
int[] array = {9, 5, 7, 3, 1, 6};
quickSort(array, 0, array.length - 1);
for (int num : array) {
System.out.print(num + " ");
}
}
}
```
上述代码中,quickSort方法是快速排序的入口,它接收一个数组和要排序的区间范围,通过调用partition方法将数组划分为两部分,并递归调用quickSort方法对左右两部分进行排序。partition方法是实现划分的核心函数,它选取最后一个元素作为基准值,然后遍历数组,将小于基准值的元素依次放到左侧,最后将基准值放到正确的位置。swap方法用于交换数组中两个元素的位置。最后,在main方法中测试快速排序的效果,输出排序后的数组。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)