java的快速排序怎么写
时间: 2023-08-31 13:24:45 浏览: 44
### 回答1:
Java中实现快速排序的方法如下:
1.从数列中挑出一个元素,称为“基准”(pivot);
2.重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分割结束之后,该基准就处于数列的中间位置。这个称为分割(partition)操作;
3.递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序;
4.退出条件:数列的大小是零或一,也就是说已经排序好了,或只有一个元素,也就是已经排序好了。
### 回答2:
快速排序是一种常用的排序算法,其实现相对简单。下面我以Java语言为例,给出一个基于递归思想的快速排序的实现步骤:
1. 首先,在需要排序的数组中选择一个基准值(pivot)。通常选择数组的第一个元素作为基准值。
2. 然后,定义两个指针:左指针和右指针。左指针指向数组的第一个元素,右指针指向数组的最后一个元素。
3. 接下来,通过比较基准值和指针所指元素的大小,将数组划分为两个子数组。比基准值小的元素放在左边,比基准值大的元素放在右边。
4. 继续对左右子数组进行递归调用,重复上述步骤,直到子数组的长度小于等于1,即无法再继续划分。
5. 最后,将左子数组、基准值和右子数组按顺序拼接起来,即得到排序后的数组。
下面是一个使用递归实现的快速排序的Java代码示例:
```java
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIdx = partition(arr, low, high); // 获取基准值的索引
quickSort(arr, low, pivotIdx - 1); // 对左子数组进行快速排序
quickSort(arr, pivotIdx + 1, high); // 对右子数组进行快速排序
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[low]; // 选择第一个元素作为基准值
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high]; // 将比基准值小的元素移到左边
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low]; // 将比基准值大的元素移到右边
}
arr[low] = pivot; // 将基准值放到最终位置
return low; // 返回基准值的索引
}
public static void main(String[] args) {
int[] arr = {9, 2, 8, 3, 7, 5, 6, 4, 1};
quickSort(arr, 0, arr.length - 1);
System.out.println("排序结果:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
以上就是一个基于递归思想的快速排序的Java实现。该算法的时间复杂度为O(nlogn),属于效率较高的排序算法之一。