java的快速排序怎么写?
时间: 2023-09-21 16:06:14 浏览: 100
### 回答1:
在Java中,快速排序的实现非常简单,只需要一个递归函数,并且每次调用时都会把列表分成两个子列表,一个比基准值小,一个比它大。然后,把两个子列表重复上述步骤,最终即可得到排序好的列表。具体代码如下:public static void quickSort(int[] array, int low, int high) {
if (array.length == 0) return;
if (low >= high) return;
// 指定左指针和右指针
int left = low;
int right = high;
// 指定基准值
int temp = array[left];
while (left < right) {
// 从右向左找到比基准值小的元素
while (left < right && array[right] >= temp) {
right--;
}
// 把右边找到的小元素放到左边
array[left] = array[right];
// 从左向右找到比基准值大的元素
while (left < right && array[left] <= temp) {
left++;
}
// 把左边找到的大元素放到右边
array[right] = array[left];
}
// 把基准值放到中间
array[left] = temp;
// 递归
quickSort(array, low, left - 1);
quickSort(array, left + 1, high);
}
### 回答2:
Java的快速排序是一种常用的排序算法,基本思想是选择一个基准元素,通过一趟排序将待排序数组划分成独立的两个部分,其中一部分中的元素都比基准元素小,另一部分中的元素都比基准元素大。然后递归地对这两部分进行排序,最终将整个数组排序完成。
快速排序的具体实现如下:
1. 首先,选择一个基准元素。可以选择数组中的任意一个元素作为基准元素,通常选择第一个元素。
2. 定义两个指针:左指针和右指针,分别指向数组的第一个和最后一个元素。
3. 进行分区操作,从右指针开始遍历,将比基准元素小的元素交换到左指针的位置,然后从左指针开始遍历,将比基准元素大的元素交换到右指针的位置,直到左指针和右指针相遇。
4. 划分完成后,基准元素位置固定,将数组分成两个子数组,递归地对子数组进行快速排序。
5. 重复步骤3和步骤4,直到子数组的长度为1或者0,即排序完成。
以下是使用Java实现的快速排序算法的代码示例:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 1, 9, 3, 7, 2, 8, 4, 6};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
public static void quickSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int pivotIndex = partition(arr, left, right);
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[left]; // 选择第一个元素作为基准元素
int i = left, j = right;
while (i < j) {
// 从右往左找到第一个小于基准元素的位置
while (i < j && arr[j] >= pivot) {
j--;
}
// 从左往右找到第一个大于基准元素的位置
while (i < j && arr[i] <= pivot) {
i++;
}
// 交换这两个元素
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准元素放到正确的位置
arr[left] = arr[i];
arr[i] = pivot;
return i;
}
}
```
以上就是Java中快速排序的实现过程,通过递归地对子数组进行排序,最终可以得到一个有序的数组。
阅读全文