java的快速排序怎么写?
时间: 2023-09-25 07:06:36 浏览: 82
### 回答1:
快速排序是一种分治算法,它的基本思路是:
1. 选取数组中的一个基准元素;
2. 将小于基准元素的数移到数组的左边,大于基准元素的数移到数组的右边;
3. 递归地对左边和右边的数组进行快速排序。
下面是 Java 代码实现:
```
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);
}
}
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++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
```
希望这份代码对您有所帮助。
### 回答2:
快速排序(Quick Sort)是一种经典的排序算法,采用分治策略进行排序。其基本思想是选取一个基准元素,将待排序序列分成两个子序列,使得左子序列的所有元素小于基准元素,右子序列的所有元素大于基准元素,然后递归地对子序列进行排序,最终得到有序序列。
具体实现快速排序的Java代码如下:
```java
public class QuickSort {
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); // 对右子序列进行快速排序
}
}
private static int partition(int[] array, int low, int high) {
int pivot = array[low]; // 选取第一个元素作为基准元素
int i = low, j = high;
while (i < j) {
// 从右往左找第一个小于基准元素的元素
while (i < j && array[j] >= pivot) {
j--;
}
if (i < j) {
array[i++] = array[j];
}
// 从左往右找第一个大于基准元素的元素
while (i < j && array[i] <= pivot) {
i++;
}
if (i < j) {
array[j--] = array[i];
}
}
array[i] = pivot; // 将基准元素放置到正确的位置
return i;
}
public static void main(String[] args) {
int[] array = {9, 5, 2, 7, 1, 8, 4, 3, 6};
quickSort(array, 0, array.length - 1);
// 输出排序结果
for (int num : array) {
System.out.print(num + " ");
}
}
}
```
以上代码是快速排序的一种常见实现方法,通过递归实现对子序列的划分和排序。在划分子序列时,我们选择第一个元素作为基准元素,并通过双指针的方式进行划分。最终,我们可以得到一个有序的序列。
注意,在实际应用中,由于快速排序的不稳定性以及对初始序列的敏感性,会对算法进行一些优化,如随机选择基准元素、三数取中法等,以提高算法的性能。
### 回答3:
快速排序是一种常见且高效的排序算法。在Java中实现快速排序的方法如下:
1. 首先,需要确定快速排序的基准元素(pivot)。一种常见的选择是选择数组的第一个元素。
2. 创建两个指针,一个指向数组的开头(left),一个指向数组的末尾(right)。
3. 接下来,我们需要将数组分为两个部分,一部分是小于基准元素的元素,另一部分是大于基准元素的元素。为了实现这一点,我们需要交换数组中指针left和right所指向的元素,直到left指针大于等于right指针。
4. 当left指针大于等于right指针时,数组就被分割成了两个部分。基准元素就处于正确的位置上了。
5. 再分别对左边和右边的子数组进行递归调用快速排序的算法,直到子数组的长度为1或0为止。
下面是一个示例代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {9, 5, 2, 7, 1, 6, 3, 8, 4};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int pivotIndex = partition(arr, left, right);
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
}
public static 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];
}
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot;
return i;
}
}
```
这样,快速排序就在Java中实现完成了。运行上述代码,输出结果应为 1 2 3 4 5 6 7 8 9。
阅读全文