用java写一个快速排序
时间: 2023-08-31 08:28:06 浏览: 69
用java实现快速排序
### 回答1:
快速排序是基于分治算法实现的经典排序算法,其核心思想是选取一个基准元素,将序列中小于等于基准元素的数放在左边,大于基准元素的数放在右边,然后递归对左右子序列进行排序。
以下是用Java语言实现快速排序的代码:
```java
public class QuickSort {
public void quickSort(int[] arr, int left, int right) {
if (left < right) {
int partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
}
private 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 void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
在快速排序方法`quickSort`中,`left`是要排序的序列左边界,`right`是要排序的序列右边界。方法执行一次后,选取一个基准元素`pivot`,将小于等于基准元素的数移到基准元素左边,大于基准元素的数移到基准元素右边,并返回基准元素所在的位置`partitionIndex`,递归对左右子序列进行快速排序。在`partition`方法中,从左边开始扫描,遇到小于等于基准元素的数就将其与指针`i`指向的数交换,指针`i`再向右移动一位,直到扫描完整个序列。最后将基准元素移动到`i`+1位置上,返回`i`+1作为基准元素所在的位置。
为了方便测试,我们可以使用如下代码来测试快排:
```java
public static void main(String[] args) {
int[] arr = {4, 7, 6, 5, 3, 2, 8, 1};
QuickSort quickSort = new QuickSort();
quickSort.quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
```
执行结果如下:
```
[1, 2, 3, 4, 5, 6, 7, 8]
```
### 回答2:
快速排序是一种常用的排序算法,其基本思想是选取一个基准元素,将待排序的序列划分成两部分,一部分小于基准元素,一部分大于基准元素,然后分别对两部分进行递归排序,最终实现整个序列有序。
以下是用Java实现快速排序的代码:
```java
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (arr == null || arr.length == 0 || low >= high) {
return;
}
// 选取基准元素
int pivot = arr[low + (high - low) / 2];
// 将序列划分成两部分
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);
}
}
public static void main(String[] args) {
int[] arr = { 8, 2, 5, 9, 7, 1, 6, 3 };
int n = arr.length;
System.out.println("排序前:");
for (int num : arr) {
System.out.print(num + " ");
}
quickSort(arr, 0, n - 1);
System.out.println("\n排序后:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
以上代码实现了快速排序,并演示了对一个数组进行排序的例子。快速排序的时间复杂度为O(nlogn),是一种高效的排序算法。
### 回答3:
快速排序是一种常用的排序算法,它基于分治的思想。下面是用Java实现快速排序的代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {4, 2, 6, 8, 3, 1, 5, 7};
quickSort(arr, 0, arr.length - 1);
System.out.println("排序结果:");
for (int i : arr) {
System.out.print(i + " ");
}
}
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`方法用于递归地进行快速排序,其参数包括待排序数组`arr`和数组的起始位置`low`和终止位置`high`。在`quickSort`方法中,判断起始位置是否小于终止位置,若小于则进行递归排序。首先通过`partition`方法找到一个基准值,然后将数组分为左右两部分,再分别对左右两部分进行排序。`partition`方法通过两个指针从数组的两端同时向中间扫描,将小于基准值的元素放在基准值的左边,大于基准值的元素放在基准值的右边。最后将基准值放到合适的位置,并返回该位置作为分界点。最后在`main`方法中调用`quickSort`方法,并输出排序结果。
以上是用Java编写的快速排序算法。该算法的时间复杂度为O(nlogn),是一种效率较高的排序算法。
阅读全文