快速排序 java 代码
时间: 2023-09-19 20:05:22 浏览: 95
### 回答1:
以下是快速排序的 Java 代码示例:
```java
public void quickSort(int[] arr, int start, int end) {
if (start < end) {
int pivot = partition(arr, start, end);
quickSort(arr, start, pivot - 1);
quickSort(arr, pivot + 1, end);
}
}
public int partition(int[] arr, int start, int end) {
int pivot = arr[start];
int left = start + 1;
int right = end;
while (left <= right) {
while (left <= right && arr[left] < pivot) {
left++;
}
while (left <= right && arr[right] >= pivot) {
right--;
}
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
int temp = arr[start];
arr[start] = arr[right];
arr[right] = temp;
return right;
}
```
该算法的思路和 Python 版本类似,选择一个基准元素(通常是第一个元素),然后将数组分为左右两个子数组,左子数组都小于基准元素,右子数组都大于等于基准元素。接着递归地对左右子数组进行排序,最后将左、右子数组和基准元素拼接起来即可。`partition` 方法用于确定基准元素最终所在的位置。
### 回答2:
快速排序是一种常见的排序算法,它的核心思想是通过选择一个基准元素将待排序数组划分为两部分,一部分元素小于基准元素,另一部分元素大于基准元素,然后对两部分分别进行递归排序,最后将结果合并起来。以下是基于Java语言的快速排序代码实现:
```java
public class QuickSort {
public void quickSort(int[] nums) {
if (nums == null || nums.length == 0) {
return;
}
quickSortHelper(nums, 0, nums.length - 1);
}
private void quickSortHelper(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int pivotIndex = partition(nums, left, right); // 划分操作,获取基准元素的位置
quickSortHelper(nums, left, pivotIndex - 1); // 对基准元素左边的子数组进行递归排序
quickSortHelper(nums, pivotIndex + 1, right); // 对基准元素右边的子数组进行递归排序
}
private int partition(int[] nums, int left, int right) {
int pivot = nums[left]; // 选择基准元素
int i = left, j = right;
while (i < j) {
// 从右边开始找到第一个小于基准元素的位置
while (i < j && nums[j] >= pivot) {
j--;
}
if (i < j) {
nums[i++] = nums[j];
}
// 从左边开始找到第一个大于基准元素的位置
while (i < j && nums[i] <= pivot) {
i++;
}
if (i < j) {
nums[j--] = nums[i];
}
}
nums[i] = pivot; // 将基准元素放入最终位置
return i;
}
}
```
以上代码使用经典的“挖坑填数法”实现快速排序,其中使用了递归和双指针的思想,通过交换元素位置实现划分和排序。在实际应用中,快速排序具有良好的平均时间复杂度和空间复杂度性能,适用于大规模数据的排序。
### 回答3:
快速排序是一种常用的排序算法,其基本思想是选择一个元素作为基准值,通过一次排序将数组分割成两部分,使得左边的元素都小于基准值,右边的元素都大于基准值。然后递归地对左右两部分进行快速排序。
下面是使用Java语言实现快速排序的代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 2, 9, 3, 1, 7, 4, 6, 8}; // 待排序的数组
quickSort(arr, 0, arr.length - 1); // 调用快速排序算法
for (int num : arr) {
System.out.print(num + " "); // 输出排序后的结果
}
}
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int partitionIndex = partition(arr, low, high); // 将数组分割成两部分
quickSort(arr, low, partitionIndex - 1); // 对左边进行快速排序
quickSort(arr, partitionIndex + 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--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
return i;
}
}
```
以上代码实现了快速排序算法,并对一个测试数组进行了排序。在快速排序过程中,使用`partition`方法将数组分割成两部分,并返回基准值的正确位置。然后,递归调用快速排序算法对分割后的两部分进行排序,最终实现全局的排序。
阅读全文