AcWing 785. 快速排序-非do-while,直接使用while来写模板
原题链接
简单
作者:
bruce
,
2021-01-23 10:20:48
,
所有人可见
,
阅读 398
/**
* 总体和y总的代码一样,就是两点注意
* 第一个不再使用左端点来作为中枢值,因为自己在这里超时了,
* 看大家评论的话如果数组是升序,时间复杂度会是n^2级别
* 第二个这里使用的是while,个人感觉更加简单明了
*/
#include<iostream>
#include<vector>
using namespace std;
const int N = 1000010;
int a[N], n;
void quick_sort(int a[], int l , int r)
{
if(l >= r) return ;
int x = a[(l+r)/2], i = l-1, j = r+1;
while(i< j)
{
while(a[++i] < x) ;
while(a[--j] > x);
if(i<j) swap(a[i], a[j]);
}
quick_sort(a, l, j);
quick_sort(a, j+1, r);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) scanf("%d", &a[i]);
quick_sort(a, 0, n-1);
for(int i=0;i<n;i++) cout<<a[i]<<" ";
}
while(q[i][HTML_REMOVED]x) –j;
if(i<j) swap (q[i],q[j]);
你好,我用了你的while语句就成功了,请教一下我的问题出在哪里啊
while(i[HTML_REMOVED]x) –j;
if(i<j) swap (q[i],q[j]);
这个显示不完整,我不知道为啥
你这个代码显示不全,使用代码书写格式,用重音符号来把你的代码框起来,用``` 这个符号
while(i<j){ while(i<j&&q[i]<x) ++i; while(i<j&&q[j]>x) --j; if(i<j) swap (q[i],q[j]);
这种可以吗