社区讨论
pascal题解,已AC,带注释
P1177【模板】排序参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi6h9wds
- 此快照首次捕获于
- 2025/11/20 04:51 4 个月前
- 此快照最后确认于
- 2025/11/20 04:51 4 个月前
CPP
var a:array[1..100000]of longint;
i,n:longint;
procedure qsort(left,right:longint);
var i,j,mid,f:longint;
begin
i:=left;j:=right;
mid:=a[(left+right) div 2];
repeat
while a[i]<mid do inc(i);//当i指针所指的数比用来比较的数小时,i指针+1,
//i指针向右(前)移动
while a[j]>mid do dec(j);//同上
if i<=j then //如果i,j指针未重合
begin
f:=a[i];a[i]:=a[j];a[j]:=f;//并且情况如上所示,然后a[i]与a[j]互换
inc(i);dec(j)//i,j指针移动
end;
until i>j;//就这么一直比较直到把所有大数放到右边,小数放左边
if left<j then qsort(left,j);
if i<right then qsort(i,right);
end;
begin
read(n);
for i:=1 to n do
read(a[i]);
qsort(1,n);//用过程直接快排
for i:=1 to n-1 do
write (a[i],' ');
write(a[n]);
end.
回复
共 2 条回复,欢迎继续交流。
正在加载回复...