关于快排
  • 板块学术版
  • 楼主___balalida___
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/10/27 21:19
  • 上次更新2023/11/4 02:06:59
查看原帖
关于快排
237541
___balalida___楼主2021/10/27 21:19

不是STL的快排

就是我看到了这种写法

void qsort(ll l,ll r){
	if(l>=r)return;
	ll mid=a[(l+r)>>1];
	ll i=l,j=r;
	do{
		while(a[i]<mid)i++;
		while(a[j]>mid)j--;
		if(i<=j)swap(a[i],a[j]),i++,j--;
	}while(i<=j);
	qsort(l,j);qsort(i,r);
}

请问while和if里面的取<=和<有什么区别?

void qsort(ll l,ll r){
	ll mid=a[(l+r)>>1];
	ll i=l,j=r;
	while(i<j){
		while(a[i]<mid)i++;
		while(a[j]>mid)j--;
		if(i<j)swap(a[i],a[j]),i++,j--;
	}
	if(l<i-1)qsort(l,i-1);
	if(i+1<r)qsort(i+1,r);
}

还有,像这样为什么是错的?

谢谢

2021/10/27 21:19
加载中...