java的快速排序怎么写
时间: 2023-08-31 22:34:43 浏览: 66
### 回答1:
快速排序的实现主要分两步:第一步是从数组中挑选一个元素(通常选择第一个元素),称为“基准”;第二步是重新排序数组,使得所有小于基准的元素摆放在基准的前面,所有大于基准的元素摆在基准的后面,并且基准处于正确位置。代码实现如下:
public static void quickSort(int[] array, int low, int high) {
if (low<high) {
int pivot = partition(array,low,high); // 将数组分为两部分
quickSort(array,low,pivot-1); // 对左部分进行快排
quickSort(array,pivot+1,high); // 对右部分进行快排
}
}
// 分割数组,找出基准值(pivot)
public static int partition(int[] array, int low, int high) {
int pivot = array[low]; // 将第一个元素作为基准
while (low<high) {
while (low<high && array[high]>=pivot) { // 从右往左找到第一个小于pivot的元素
high--;
}
array[low] = array[high]; // 将该元素放在左边
while (low<high && array[low]<=pivot) { // 从左往右找到第一个大于pivot的元素
low++;
}
array[high] = array[low]; // 将该元素放在右边
}
array[low] = pivot; // 将基准放到正确位置
return low;
}
### 回答2:
快速排序是一种常用的排序算法,它基于分治的思想。下面是Java中实现快速排序的代码:
```java
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high); // 划分数组,并获取基准值的位置
quickSort(arr, low, pivot - 1); // 对左子数组进行快速排序
quickSort(arr, pivot + 1, high); // 对右子数组进行快速排序
}
}
public static int partition(int[] arr, int low, int high) {
int pivot = arr[low]; // 选择第一个元素作为基准值
int i = low, j = high;
while (i < j) {
// 从右向左找到第一个小于基准值的元素
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i] = arr[j]; // 将该元素移到基准值左边
i++;
}
// 从左向右找到第一个大于基准值的元素
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
arr[j] = arr[i]; // 将该元素移到基准值右边
j--;
}
}
arr[i] = pivot; // 将基准值放到最终的位置
return i; // 返回基准值的位置
}
public static void main(String[] args) {
int[] arr = {5, 3, 8, 2, 1, 7, 4};
quickSort(arr, 0, arr.length - 1);
System.out.println("排序后的数组:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
上述代码中,快速排序的入口函数是`quickSort`,它接收一个未排序的数组`arr`,以及数组的起始索引`low`和结束索引`high`。在`quickSort`函数中,我们首先划分数组,将小于基准值的元素放在基准值的左边,将大于基准值的元素放在右边。然后,对左右子数组分别递归调用`quickSort`函数,直到区间范围缩小到只有一个元素。`partition`函数用于划分数组,它选择第一个元素作为基准值,并使用两个指针`i`和`j`分别从数组的起始和末尾开始遍历,找到需要交换的元素,直到`i`和`j`相遇。最后,将基准值放到最终的位置,并返回基准值的位置。
通过以上的快速排序算法代码,我们可以对一个无序数组进行排序,并输出排序后的结果。
### 回答3:
Java的快速排序(QuickSort)是一种常用的排序算法,它通过分治的思想将待排序序列不断划分成更小的子序列进行排序。
快速排序的实现主要包括以下步骤:
1.选择一个基准元素。通常选择序列的第一个元素作为基准。
2.将序列分成两部分,使得左边部分的元素都比基准小,右边部分的元素都大于或等于基准。这一步称为分区操作。
3.对左右两个分区重复步骤2,直到每个子序列只有一个元素为止。
4.排序完成。
快速排序的具体实现可以使用递归或迭代的方式。
递归实现的代码如下:
```
public 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); // 对右子序列进行快速排序
}
}
public 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--;
}
if (i < j) {
arr[i] = arr[j]; // 将该元素移到基准的左边
i++;
}
while (i < j && arr[i] < pivot) { // 从左往右找到第一个大于等于基准的元素
i++;
}
if (i < j) {
arr[j] = arr[i]; // 将该元素移到基准的右边
j--;
}
}
arr[i] = pivot; // 将基准放在最终位置
return i;
}
```
以上是一种常用的快速排序实现,通过不断地分区和递归调用,实现了对整个序列的排序。注意在分区操作中,通过左右指针的移动,将小于基准的元素移到基准的左边,将大于等于基准的元素移到基准的右边。同时,在递归调用时,对左右子序列进行排序。最终,整个序列就会有序输出。
阅读全文