#include <stdio.h>
int n;
const int N = 100010;
int q[N]; //不可定义为q[n],数组长度必须为定值
void quick_sort(int q[],int l,int r) //形参 要注明类型 数组可以不用写长度 ///调用函数:检测+x+指针+移动(交换)+递归
{
if(l>=r) return; //序列为空或只有一个数
int x = q[l + r >> 1]; //这个是位运算 ,相当于除二 //设置分界基准,指针 i,j ???为何设置指针 !!!!x的值不是与长度相关而是指针内容呀
int i=l-1;
int j=r+1;
while(i<j) //i<j表示指针未交叉 如若不满足,说明循环结束
{
do i++;while(q[i]<x);
do j--;while(q[j]>x); //先执行后while 扣留元素
if(i<j)
swap(q[i],q[j]); //交换结束后i继续向后移动
} //注意循环的包含关系
//递归
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main( ) //主函数 int 搭配return 0; ///主函数:输入+调用+输出+return
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&q[i]);
quick_sort(q,0,n-1);
for(int i=0;i<n;i++) printf("%d",q[i]);
return 0;
}
蓝桥杯day5-快排:acwing-785. 快速排序
于 2024-03-24 20:53:32 首次发布