java的快速排序怎么写?
时间: 2023-09-09 08:04:26 浏览: 47
### 回答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:
快速排序是一种常用的排序算法,在Java中可以使用递归实现。下面是一个简单的快速排序的实现示例:
```java
public class QuickSort {
public static void main(String[] args) {
int[] array = {5, 2, 1, 8, 4};
quickSort(array, 0, array.length - 1);
for (int num : array) {
System.out.print(num + " ");
}
}
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[low]; // 选择第一个元素为基准元素
while (low < high) {
while (low < high && array[high] >= pivot) {
high--;
}
array[low] = array[high]; // 将比基准元素小的移到低端
while (low < high && array[low] <= pivot) {
low++;
}
array[high] = array[low]; // 将比基准元素大的移到高端
}
array[low] = pivot; // 基准元素归位
return low; // 返回基准元素的索引
}
}
```
以上代码中,quickSort方法实现了快速排序算法的递归部分,partition方法用于将数组划分为两部分,并返回基准元素的索引。在递归过程中,通过不断更新基准元素的左右边界,将比基准元素小的移到低端,比基准元素大的移到高端,然后对左右两部分分别进行递归排序,直到排序完成。运行以上代码,输出结果为:1 2 4 5 8,即为快速排序后的结果。
### 回答3:
快速排序(Quick Sort)是一种常用的排序算法。它通过选择一个基准元素将待排序的数组分成两个独立的部分,其中一个部分的元素均小于等于基准元素,另一个部分的元素均大于等于基准元素,然后递归地对两个部分进行排序,最终使整个数组有序。
在Java中,我们可以通过递归实现快速排序。首先,选择一个基准元素,可以是数组的第一个元素。然后,定义两个指针,一个指向数组的第一个元素(左指针),另一个指向数组的最后一个元素(右指针)。接下来,循环比较左指针和右指针所指向的元素与基准元素的大小关系。
如果左指针所指向的元素小于等于基准元素,则将左指针右移一位,继续比较下一个元素。如果左指针所指向的元素大于基准元素,则停止移动。
如果右指针所指向的元素大于等于基准元素,则将右指针左移一位,继续比较前一个元素。如果右指针所指向的元素小于基准元素,则停止移动。
当左指针和右指针相遇时,将基准元素与左指针所指向的元素交换位置。
接着,递归地对基准元素左侧和右侧的子数组进行排序,直到子数组长度为1或0,递归结束。
以下是Java代码示例:
```java
public class QuickSort {
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high); // 将数组分为两部分,并返回基准元素的索引
quickSort(arr, low, pivotIndex - 1); // 对左侧子数组进行快速排序
quickSort(arr, pivotIndex + 1, high); // 对右侧子数组进行快速排序
}
}
private int partition(int[] arr, int low, int high) {
int pivot = arr[low]; // 基准元素
int left = low; // 左指针
int right = high; // 右指针
while (left < right) {
// 从右向左找到第一个小于基准元素的元素
while (left < right && arr[right] >= pivot) {
right--;
}
// 从左向右找到第一个大于基准元素的元素
while (left < right && arr[left] <= pivot) {
left++;
}
// 交换两个元素
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
// 将基准元素与左指针所指元素交换位置
arr[low] = arr[left];
arr[left] = pivot;
return left; // 返回基准元素的索引
}
public static void main(String[] args) {
int[] arr = {5, 2, 8, 9, 1, 3};
QuickSort quickSort = new QuickSort();
quickSort.quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr)); // 输出排序后的数组
}
}
```
以上就是使用Java编写的快速排序算法的示例。通过不断地划分子数组并递归地排序,最终实现了对整个数组的排序。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)