社区讨论

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 条回复,欢迎继续交流。

正在加载回复...