java的快速排序算法代码
时间: 2023-09-17 07:05:08 浏览: 114
### 回答1:
Java 的快速排序算法代码如下:
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);
}
} private static int partition(int[] arr, int left, int right) {
// 设定基准值(pivot)
int pivot = arr[right];
int i = left;
for (int j = left; j < right; j++) {
if (arr[j] < pivot) {
swap(arr, i, j);
i++;
}
}
swap(arr, i, right);
return i;
} private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
### 回答2:
快速排序(Quick Sort)是一种高效的排序算法,它是基于“分治法(Divide and Conquer)”思想的。
下面是一个使用Java语言实现的快速排序算法的代码示例:
```java
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
// 将数组划分为两个子数组,并获取中间位置
int partitionIndex = partition(arr, low, high);
// 对左右子数组分别进行快速排序
quickSort(arr, low, partitionIndex - 1);
quickSort(arr, partitionIndex + 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++;
swap(arr, i, j);
}
}
// 将基准值放到正确的位置
swap(arr, i + 1, high);
return i + 1; // 返回基准值的位置
}
private 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 = {5, 2, 9, 1, 8, 6, 3, 7, 4};
System.out.println("Before sorting: " + Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println("After sorting: " + Arrays.toString(arr));
}
}
```
该代码使用递归实现了快速排序算法。在递归的过程中,首先选取一个基准值(通常选择数组的最右边元素)作为比较标准,然后将数组划分为两个子数组,一个子数组是所有小于基准值的元素,另一个子数组是所有大于基准值的元素。然后再对这两个子数组递归地进行快速排序,直到最后整个数组有序。
在同一次循环中,通过比较数组元素与基准值的大小,将小于基准值的元素交换到基准值的左边,大于基准值的元素交换到基准值的右边。最后,将基准值放到正确的位置,即基准值左边的元素都小于它,右边的元素都大于它。
以上就是一个简单的Java实现的快速排序算法的代码示例。
### 回答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); // 递归排序右子数组
}
}
private 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`方法,传入待排序数组的起始和结束索引。代码首先判断是否需要继续排序,然后选择一个基准元素并进行划分,接着递归排序左子数组和右子数组,最后将左、基准、右三部分合并起来得到排好序的数组。
阅读全文