快速排序Java代码
时间: 2023-08-19 20:15:14 浏览: 95
快速排序java代码
### 回答1:
以下是一个基本的快速排序的Java代码,用于排序一个整数数组:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {6, 5, 3, 1, 8, 7, 2, 4}; // 待排序的数组
quickSort(arr, 0, arr.length - 1); // 进行快速排序
System.out.println(Arrays.toString(arr)); // 输出排序后的数组
}
public static 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); // 对右半边进行快速排序
}
}
public static int partition(int[] arr, int left, int right) {
int pivot = left; // 选择左边第一个元素作为基准值
int index = pivot + 1; // 用于记录大于基准值的元素的位置
for (int i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) { // 如果当前元素小于基准值
swap(arr, i, index); // 交换当前元素和大于基准值的元素位置
index++; // 大于基准值的元素位置加 1
}
}
swap(arr, pivot, index - 1); // 将基准值和最后一个大于基准值的元素交换位置
return index - 1; // 返回分隔点位置
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
快速排序的基本思想是在待排序的序列中选择一个基准元素,将序列中所有小于基准元素的元素放在基准元素的左边,所有大于基准元素的元素放在基准元素的右边,然后对左右两个子序列递归地进行快速排序,直到整个序列有序。
### 回答2:
快速排序是一种高效的排序算法,它的基本思想是通过划分将一个数组分割成较小和较大的两个子数组,然后递归地排序两个子数组。
以下是一个使用Java实现的快速排序代码:
```java
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // 划分数组并返回划分点的下标
quickSort(arr, low, pi - 1); // 对划分点左边的子数组进行快速排序
quickSort(arr, pi + 1, high); // 对划分点右边的子数组进行快速排序
}
}
public 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++;
swap(arr, i, j); // 将较小的元素交换到划分点左边
}
}
swap(arr, i + 1, high); // 将划分点放置到正确的位置上
return i + 1; // 返回划分点的下标
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {10, 7, 8, 9, 1, 5};
int n = arr.length;
quickSort(arr, 0, n - 1);
System.out.println("排序后的数组:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
快速排序的时间复杂度为O(n log n),其中n是数组的大小。它是一种原地排序算法,不需要额外的存储空间。快速排序是面试中常见的排序算法,写出它的代码可以展示出对基本排序算法的掌握程度。
### 回答3:
快速排序是一种常用的排序算法,效率较高。下面是用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);
}
}
public static int partition(int[] array, int low, int high) {
int pivot = array[low];
int left = low + 1;
int right = high;
while (left <= right) {
while (left <= right && array[left] <= pivot) {
left++;
}
while (left <= right && array[right] >= pivot) {
right--;
}
if (left < right) {
swap(array, left, right);
}
}
swap(array, low, right);
return right;
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) {
int[] array = {15, 42, 8, 23, 56, 19};
int length = array.length;
System.out.println("排序前:");
for (int num : array) {
System.out.print(num + " ");
}
quickSort(array, 0, length - 1);
System.out.println("\n排序后:");
for (int num : array) {
System.out.print(num + " ");
}
}
}
```
这段代码实现了快速排序算法。快速排序的思想是首先选择一个枢纽元素(通常选择第一个元素),然后通过一趟排序将数组分割成两个子数组,其中一个子数组中的元素都比枢纽元素小,另一个子数组中的元素都比枢纽元素大。然后再对这两个子数组分别进行快速排序,最终得到一个有序序列。
在main方法中,我们示例了使用快速排序算法对一个数组进行排序的过程。最终将输出排序前和排序后的数组。
阅读全文