java的快速排序程序
时间: 2023-09-20 18:06:16 浏览: 143
### 回答1:
Java的快速排序程序的代码实现如下:
```
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1};
sort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void sort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
sort(arr, low, pivotIndex-1);
sort(arr, pivotIndex+1, high);
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low-1;
for (int j=low; j<high; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i+1, high);
return i+1;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
该程序实现了快速排序的基本逻辑:选定一个 pivot 值,将数组分为比 pivot 小和比 pivot 大的两部分,再分别对两部分进行快速排序。
### 回答2:
快速排序是一种基于分治策略的排序算法。它的原理是选择一个基准数,通过比较将小于基准数的元素放在左边,大于基准数的元素放在右边,然后再对左右两个子序列进行递归排序。
在Java中,可以通过以下方式实现快速排序程序:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 8, 2, 1, 6, 3, 9, 4, 7};
quickSort(arr, 0, arr.length - 1);
System.out.println("排序后的数组:");
for (int num : arr) {
System.out.print(num + " ");
}
}
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];
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;
}
}
```
以上代码实现了一个快速排序程序。通过`quickSort`方法递归调用自身来实现排序,`partition`方法用于将元素按照基准数分成左右两个子序列。
在代码中,我们选取第一个元素作为基准数`pivot`,然后使用两个指针`low`和`high`,分别从数组的两端向中间移动。如果`arr[high]`大于等于基准数,`high`指针往左移动,直到找到比基准数小的元素;如果`arr[low]`小于等于基准数,`low`指针往右移动,直到找到比基准数大的元素。然后将找到的两个元素交换。重复这个过程,直到`low`和`high`相遇。最后将基准数放到它应该在的位置上,并返回这个位置。
通过递归调用`quickSort`方法,可以将左右两个子序列分别排序,最终达到整个数组有序的目的。排序完成后,我们可以打印数组中的元素,验证排序结果。
### 回答3:
快速排序是一种常用的排序算法,也是Java中常用的排序方法之一。它采用分治的思想,通过递归将数组分割为较小的子数组,并将这些子数组排序,最后再将子数组合并为有序数组。
快速排序的基本思想是选取一个基准值,然后将数组分成两部分,比基准值小的元素放在左边,比基准值大的元素放在右边。可以使用两个指针分别从数组的头和尾开始,依次向中间扫描,当两个指针相遇时结束,将当前指针的位置作为基准值的位置,并把数组分割为两个子数组。然后对两个子数组分别递归调用快速排序算法,直到最终完成排序。
下面是一个使用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);
}
}
public static int partition(int[] arr, int low, int high) {
int pivot = arr[low]; // 以第一个元素为基准值
int i = low;
int j = high;
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot;
return i;
}
public static void main(String[] args) {
int[] arr = {9, 5, 2, 7, 4, 8, 1, 6, 3};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
上述代码中,首先定义了`quickSort`方法用于执行快速排序操作。在`quickSort`方法中,通过调用`partition`方法找到基准值的位置,并递归调用`quickSort`方法对基准值左右两侧的子数组进行排序。`partition`方法中采用了双指针的方式进行元素交换,最后返回基准值的位置。
在`main`方法中,我们定义了一个测试数组,然后调用`quickSort`方法对该数组进行排序,并输出排序结果。
快速排序的时间复杂度为O(nlogn),是一种高效的排序方法,在实际应用中有着广泛的应用。
阅读全文