使用快速排序方法对数组a[]={11,3,16,22,2,17,15,9,10,13}升序排序,partition
时间: 2023-10-03 22:04:54 浏览: 66
快速排序是一种基于分治思想的排序算法,它的核心思想是通过选择一个基准值(pivot),将数组分成两个部分,一部分小于基准值,一部分大于基准值,然后递归地对两个部分进行排序。
下面是使用快速排序算法对数组a[]={11,3,16,22,2,17,15,9,10,13}升序排序的过程:
1. 选择一个基准值,比如选择数组的第一个元素a[0]=11作为基准值。
2. 定义两个指针i和j,分别指向数组的最左端和最右端。
3. 从右向左扫描数组,如果a[j]大于等于基准值,则将j向左移动一位,直到找到一个a[j]小于基准值为止。
4. 从左向右扫描数组,如果a[i]小于等于基准值,则将i向右移动一位,直到找到一个a[i]大于基准值为止。
5. 如果i<j,则交换a[i]和a[j],然后继续执行步骤3和4,直到i>=j。
6. 将基准值a[0]与a[j]交换,此时数组被分成了两个部分,左边部分的所有元素都小于等于a[j],右边部分的所有元素都大于a[j]。
7. 对左边部分和右边部分分别递归执行步骤1到步骤6,直到数组完全有序。
下面是使用Java实现快速排序算法的代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] a = {11,3,16,22,2,17,15,9,10,13};
quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
public static void quickSort(int[] a, int left, int right) {
if (left < right) {
int pivotIndex = partition(a, left, right);
quickSort(a, left, pivotIndex - 1);
quickSort(a, pivotIndex + 1, right);
}
}
public static int partition(int[] a, int left, int right) {
int pivot = a[left];
int i = left + 1;
int j = right;
while (true) {
while (i <= j && a[i] < pivot) {
i++;
}
while (i <= j && a[j] > pivot) {
j--;
}
if (i > j) {
break;
}
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
int temp = a[left];
a[left] = a[j];
a[j] = temp;
return j;
}
}
```
输出结果为:2 3 9 10 11 13 15 16 17 22。
阅读全文