快速排序java以第一个元素为基准
时间: 2024-09-11 10:15:39 浏览: 41
快速排序是一种常用的高效排序算法,它通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分继续进行排序,以达到整个序列有序的目的。在Java中实现快速排序的基本步骤如下,假设我们以第一个元素(pivot)为基准:
1. **选择基准**:通常选择数组的第一个元素作为基准值。
2. **分区操作(Partitioning)**:
- 定义两个指针:`i` (指向开始) 和 `j` (指向结束)。
- 遍历从第二个元素到数组最后一个元素:
- 如果当前元素小于等于基准,将 `i` 指向的值与当前元素交换,并将 `i` 向右移动一位。
- 当 `i` 等于 `j` 时,说明已经找到大于基准的最小区间,这时将基准值与 `arr[j]` 交换位置,完成一次分区。
3. **递归排序**:
- 对基准左侧(包括基准本身)的小区间的子数组进行递归排序。
- 对基准右侧的子数组进行递归排序。
4. **返回结果**:递归完成后,整个数组就按照升序排列了。
下面是一个简单的快速排序Java代码示例:
```java
public class QuickSort {
public 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); // 右侧
}
}
private 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;
}
}
```
阅读全文