java快速排序。代码实现
时间: 2023-09-15 15:05:48 浏览: 60
### 回答1:
Java中的快速排序实现如下:
```java
public class QuickSort {
public static void sort(int[] arr, int left, int right) {
if (left < right) {
int pivot = partition(arr, left, right);
sort(arr, left, pivot - 1);
sort(arr, pivot + 1, right);
}
}
private static int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, right);
return i + 1;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
使用方法:
```java
int[] arr = {5, 3, 8, 4, 9, 1, 6, 2, 7};
QuickSort.sort(arr, 0, arr.length-1);
```
上面的例子将会按升序对数组arr进行排序。
### 回答2:
快速排序是一种常用的排序算法,它采用了分治的思想。下面是Java语言的快速排序的代码实现:
```
public class QuickSort {
public static void main(String[] args) {
int[] nums = {5, 2, 8, 3, 9, 1, 7};
quickSort(nums, 0, nums.length - 1);
for (int num : nums) {
System.out.print(num + " ");
}
}
public static void quickSort(int[] nums, int left, int right) {
if (left < right) {
int pivotIndex = partition(nums, left, right);
quickSort(nums, left, pivotIndex - 1);
quickSort(nums, pivotIndex + 1, right);
}
}
public static int partition(int[] nums, int left, int right) {
int pivot = nums[left];
int i = left + 1;
int j = right;
while (i <= j) {
if (nums[i] < pivot && nums[j] > pivot) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j--;
}
if (nums[i] >= pivot) {
i++;
}
if (nums[j] <= pivot) {
j--;
}
}
int temp = nums[left];
nums[left] = nums[j];
nums[j] = temp;
return j;
}
}
```
以上代码实现了快速排序算法。首先,在main方法中定义了一个整数数组nums并初始化,然后调用quickSort方法对该数组进行排序。在quickSort方法中,首先判断left是否小于right,如果是,则调用partition方法获取一个基准值的索引pivotIndex,并分别对基准值左边和右边的子数组进行递归排序。在partition方法中,设置基准值为nums[left],然后通过两个指针i和j分别从左右两边向中间扫描,如果满足条件,则交换两个元素的位置,直到两个指针相遇。最后,交换基准值与指针j所在位置的元素,将基准值放在正确的位置上,并返回基准值的索引。这样就完成了一次快速排序的操作。最后,打印排序后的数组。
### 回答3:
快速排序是一种排序算法,它的实现原理是通过选取一个基准元素,将数组分成两部分,左边的部分都比基准元素小,右边的部分都比基准元素大。然后再对左右两部分分别进行快速排序,以达到整个数组有序的目的。
以下是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]; // 选取第一个元素作为基准元素
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 = {6, 1, 5, 9, 3, 8, 7, 2, 4};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
以上代码通过递归调用快速排序的方式,将数组进行排序。首先选取第一个元素作为基准元素,然后通过不断地比较和交换元素,将基准元素放置到正确的位置,再递归地对左右子数组进行排序操作,直到整个数组有序为止。最后输出排序后的数组。