java写一个快速排序算法
时间: 2023-09-24 22:05:24 浏览: 130
### 回答1:
我可以给你一个快速排序的Java算法的示例:
public static void quickSort(int[] array, int left, int right) {
if (left < right) {
int partitionIndex = partition(array, left, right);
quickSort(array, left, partitionIndex-1);
quickSort(array, partitionIndex+1, right);
}
} private static int partition(int[] array, int left, int right) {
int pivot = array[right];
int i = left;
for (int j = left; j < right; j++) {
if (array[j] <= pivot) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
}
}
int temp = array[i];
array[i] = array[right];
array[right] = temp;
return i;
}
### 回答2:
快速排序(Quick Sort)是一种常用的排序算法,它的基本思想是通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
具体实现过程如下:
1. 首先选取一个基准元素(pivot),常选取第一个元素。
2. 设置两个指针low和high,分别指向初始的第一个元素和最后一个元素。
3. 从high开始向左搜索,找到第一个小于基准元素的元素,将其与基准元素交换位置。
4. 从low开始向右搜索,找到第一个大于基准元素的元素,将其与基准元素交换位置。
5. 重复步骤3和步骤4,直到low和high相遇。
6. 将基准元素放到该相遇位置。
7. 分别对基准元素左边和右边的序列递归地进行步骤1到步骤7。
下面是一个简单的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 = {5, 2, 9, 1, 6, 3, 8, 7, 4};
quickSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
这段代码通过递归调用实现了快速排序算法,首先选取数组的第一个元素作为基准元素,调用partition方法将数组分割成两部分,并返回基准元素的位置,然后再对左右两部分分别递归调用quickSort方法进行排序,最终得到一个有序的数组。以上是一个简单的实现,实际应用中可能需要处理更多的情况,比如处理重复元素。
### 回答3:
快速排序是一种常用的排序算法,采用分治法的思想。其主要思想是选择一个元素(称为基准)作为参考,将数组中小于基准的元素放在基准的左边,大于基准的元素放在基准的右边,然后递归地对基准左右两边的子数组执行相同的操作,直到整个数组有序。
下面是用Java实现快速排序的代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 3, 9, 4, 1, 7, 6};
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 pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 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 类,包含 main 方法和两个辅助方法 quickSort 和 partition。
- main 方法首先定义一个待排序的数组,并调用 quickSort 进行快速排序,最后打印排序结果。
- quickSort 方法是快速排序的核心方法,它通过 partition 方法将数组分割成左右两个子数组,并递归地对子数组进行排序。
- partition 方法根据基准元素的选择将数组分割成左右两个子数组,然后返回基准元素的索引。
最后,运行该代码,输出的结果为:“排序结果:1 2 3 4 5 6 7 8 9”,即为排序后的数组。
阅读全文