对一段简易的快速排序代码里的每一步都作了解释…希望能有一点帮助
#include <bits/stdc++.h>
using namespace std;
// int *a 相当于 a[],数组名代表了数组的首地址
void quickSort(int *a, int left, int right){
if(left >= right) // 当 left 等于 right 时,说明排序完成
return; // 退出 quickSort 函数回到主函数
// left 小于 right ,开始进行排序
int i = left; // i 记录 left 的值
int j = right; // j 记录 right 的值
int temp = a[left]; // 把 a[left] 作为基准数,temp 记录它的值
// 当 i 与 j 相遇时( i == j ),退出循环,并交换 a[i] 与 a[left] 的值
// 因为此时 a[left] 已经被排到了正确位置,即 a[left] 左边的数都比它小,右边的数都比他大
while(i < j){
// 找一个数大于(等于)基准数 a[left]
while(i < j && a[j] >= temp)
j--; //从右往左
// 找一个数小于(等于)基准数 a[left]
while(i < j && a[i] <= temp)
i++; //从左往右
// 交换他们,让 a[left] 左边的数都比他小,右边的数都比他大,从而实现升序
swap(a[i], a[j]);
}
// i 与 j 相遇后退出了循环,交换 a[i] 与 a[left] 的值
a[left] = a[i];
a[i] = temp;
// 先递归处理 a[i] 右边所有的数
quickSort(a, left, i-1);
// 再递归处理 a[i] 左边所有的数
quickSort(a, i+1, right);
}
int main(){
int n;
int a[100000];
// 输入数据
cin >> n;
for(int i=0; i<n; i++)
cin >> a[i];
// 给快速排序设一个初值(下标为0的元素),启动排序
quickSort(a, 0, n-1);
// 输出结果
for(int i=0; i<n; i++)
cout << a[i] <<" ";
return 0;
}