社区讨论

快排1234WA,悬关求debug

P1177【模板】排序参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lpsffqgl
此快照首次捕获于
2023/12/05 22:19
2 年前
此快照最后确认于
2023/12/06 12:49
2 年前
查看原帖
代码如下
CPP
#include <bits/stdc++.h>
using namespace std;
int temp,N,flag;
int a[100010];
void find(int len/*n*/,int l){
	int r=l+len-1,setl=l;//r转化为数组尾项
	flag = len/2;
	while(l<(setl+flag)||r>(setl+flag)){
		while((a[l]<a[setl+flag]))//8-11在找到值之后停下
			l++;//**for(;a[l]<a[setl+(len/2);i++)会出现【不像是循环结束而是循环一次直接跳】的现象 
		while((a[r]>a[setl+flag]))//********错误:没把“哨兵数”确定下来而是用数组中间值 
			r--;
		temp=a[l],a[l]=a[r],a[r]=temp;//数字交换 
//		cout<<"test"<<l<<' '<<r<<' '<<endl;////输出l与r数值得到交换数位置 
//		for(int i=0;i<N;i++)
//			cout<<a[i]<<" ";
//		cout<<"(a)"<<endl;//输出交换后数组
		if(a[l]=a[r])break;
	}
//	cout<<"output over"<<endl;
	if(len>2){	//递归结束条件
		find(ceil(len/2),0);
		find(ceil(len/2),len/2);
	}
}
int main(){
	cin>>N;//scanf("%d",N);// 
	for(int i=0;i<N;i++)
		cin>>a[i];//scanf("%d",a[i]);
	find(N,0);
	for(int i=0;i<N;i++)
		cout<<a[i]<<" ";
	cout<<endl;
//	for(int i=0;i<N;i++)
//		cout<<"return"<<a[i];
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...