int Partition(int a[],int low,int n) { a[0]=a[low]; int high=n; int pivotkey=a[low]; while(low<high) { while(low<high&&a[high]>=pivotkey) { --high; } while(low<high&&a[low]<=pivotkey) { ++low; } a[low]=a[0]; return low; } } void Qsort(int a[],int low,int n)//快速排序 { low = 1; int high = n; if(low<high) { int pivotloc=Partition(a,low,high); Qsort(a,low,pivotloc-1); Qsort(a,pivotloc+1,high); } }
时间: 2024-03-10 12:45:38 浏览: 77
这是一个使用快速排序算法对数组进行排序的 C++ 代码。其中 `Partition` 函数用于实现按照一个基准值(pivotkey)将数组划分为左右两个部分,且左边的元素都小于基准值,右边的元素都大于基准值。`Qsort` 函数则用于递归实现对左右两部分分别进行快速排序。
以下是对代码的注释说明:
```cpp
int Partition(int a[], int low, int n) {
a[0] = a[low]; // 将基准值存储到数组的第一个位置
int high = n;
int pivotkey = a[low]; // 选择基准值
while (low < high) {
while (low < high && a[high] >= pivotkey) {
--high;
}
a[low] = a[high]; // 将右侧小于基准值的元素移动到左侧
while (low < high && a[low] <= pivotkey) {
++low;
}
a[high] = a[low]; // 将左侧大于基准值的元素移动到右侧
}
a[low] = a[0]; // 将基准值放置到最终位置
return low;
}
void Qsort(int a[], int low, int n) {
low = 1; // 从第二个元素开始排序
int high = n;
if (low < high) {
int pivotloc = Partition(a, low, high); // 获取基准值位置
Qsort(a, low, pivotloc-1); // 对基准值左侧的元素进行排序
Qsort(a, pivotloc+1, high); // 对基准值右侧的元素进行排序
}
}
```
需要注意的是,该代码在 `Partition` 函数中的 `return low;` 语句应该放在 `while` 循环之外,以便在最终将基准值放置到最终位置时能够正确返回基准值的位置。
阅读全文