十大经典排序算法系列博客——>传送门
##### 1.快排的实现逻辑:
- 先从数列中取出一个数作为基准数(通常取第一个数)。
- 遍历序列,将比它小的数与比它大的数分别记录下来,分为两类,最后该数放在这两类数中间(它左边的所有数都比它小,右边的所有数都比它大)
- 分别遍历左右区间,重复,直到各区间只有一个数
2. 动态演示
- 代码实现
#include<bits/stdc++.h>
using namespace std;
void QuickSort(int *arr, int left, int right) {
if(left > right) return;
int i = left, j = right;
int flag = arr[left];
while(i != j) {
while(arr[j] > flag && i < j) j--;
while(arr[i] <= flag && i < j) i++;
if(i<j) swap(arr[i], arr[j]);
} //完成while循环后,i=j
//交换准基数与相遇值,即将中值归位
arr[left] = arr[i];
arr[i] = flag;
//将中值左、右侧的数据分别进行排序(递归)
QuickSort(arr, left, i-1);
QuickSort(arr, i+1, right);
//最左边的为准基数
}
int main() {
int n; cin>>n; int array[n];
for(int i = 0; i < n; i++) cin>>array[i];
QuickSort(array, 0, n-1);
//范围for循环打印数组
for(int i = 0 ; i < n; i++) cout << array[i] << ' ';
return 0;}