写个快排的java代码
时间: 2023-09-19 10:06:13 浏览: 104
### 回答1:
public static void quickSort(int[] arr, int low, int high) {
if (arr == null || arr.length == 0)
return;
if (low >= high)
return;
// 选定基准元素,以此为分界点
int middle = low + (high - low) / 2;
int pivot = arr[middle];
// 将大于基准元素的放到右边,小于基准元素的放到左边
int i = low, j = high;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
// 递归排序子序列
if (low < j)
quickSort(arr, low, j);
if (high > i)
quickSort(arr, i, high);
}
### 回答2:
下面是一段使用Java实现的快速排序算法的代码:
```java
public class QuickSort {
public static void quickSort(int[] array, int left, int right) {
if (left < right) {
int pivotIndex = partition(array, left, right);
quickSort(array, left, pivotIndex - 1);
quickSort(array, pivotIndex + 1, right);
}
}
private static int partition(int[] array, int left, int right) {
int pivot = array[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (array[j] < pivot) {
i++;
swap(array, i, j);
}
}
swap(array, i+1, right);
return i + 1;
}
private static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) {
int[] array = {7, 2, 1, 6, 8, 5, 3, 4};
quickSort(array, 0, array.length - 1);
for (int num : array) {
System.out.print(num + " ");
}
}
}
```
这段代码实现了快速排序算法。首先定义了一个`quickSort`函数,用于递归地对数组进行分区和排序。在`quickSort`函数中,通过调用`partition`函数确定基准元素的位置,然后将数组分为两个子数组,并分别对它们进行快速排序。`partition`函数通过将小于基准元素的数移到左边,大于基准元素的数移到右边,来实现对数组的分区。同时,它记录了基准元素的最终位置,以便作为下一次递归中的分区点。
在`main`函数中,我们定义了一个示例数组,并调用`quickSort`函数对其进行排序。最后,输出排序后的数组。
### 回答3:
快速排序(Quick Sort)是一种常用的排序算法,它的基本思想是选择一个基准元素,将待排序序列划分为两个子序列,小于基准元素的放在左边,大于基准元素的放在右边,然后再对左右两个子序列进行快速排序,重复这个过程直到整个序列有序。
以下是使用Java编写的快速排序代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] array = {5, 2, 8, 6, 1, 9};
quickSort(array, 0, array.length - 1);
System.out.println("排序结果:");
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]; // 选择第一个元素作为基准元素
int left = low;
int right = high;
while (left < right) {
while (left < right && array[right] >= pivot) {
right--; // 从右往左找到第一个小于基准元素的索引
}
if (left < right) {
array[left] = array[right]; // 将小于基准元素的值赋给左指针位置
left++;
}
while (left < right && array[left] <= pivot) {
left++; // 从左往右找到第一个大于基准元素的索引
}
if (left < right) {
array[right] = array[left]; // 将大于基准元素的值赋给右指针位置
right--;
}
}
array[left] = pivot; // 将基准元素放入最终位置
return left;
}
}
```
在上述代码中,我们首先定义了`quickSort()`方法来实现递归调用,`partition()`方法用于划分序列并返回基准元素的最终位置。在`partition()`方法中,我们选取第一个元素作为基准元素,然后使用左指针和右指针分别从两端向中间扫描,找到需要交换的元素,将它们交换位置。最后,将基准元素放入最终位置,并返回它的索引。
对于给定的输入数组`array = {5, 2, 8, 6, 1, 9}`,经过快速排序后,输出的结果为`1 2 5 6 8 9`。
阅读全文