Image Modal

合肥
合肥奥数网

合肥站
奥数网

信息学竞赛常用算法与策略:排序(3)

合肥奥数网整理 2013-01-17 15:19:01

  4.2快速排序

  快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.

  例:输入一组数据小到大排序.

  程序1:

  program kspv;

  const n=7;

  type

  arr=array[1..n] of integer;

  var

  a:arr;

  i:integer;

  procedure quicksort(var b:arr; s,t:integer);

  var i,j,x,t1:integer;

  begin

  i:=s;j:=t;x:=b[i];

  repeat

  while (b[j]>=x) and (j>i) do j:=j-1;

  if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;

  while (b[i]<=x) and (i<j) do i:=i+1;

  if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end

  until i=j;

  b[i]:=x;

  i:=i+1;j:=j-1;

  if s<j then quicksort(b,s,j);

  if i<t then quicksort(b,i,t);

  end;

  begin

  write('input data:');

  for i:=1 to n do read(a[i]);

  writeln;

  quicksort(a,1,n);

  write('output data:');

  for i:=1 to n do write(a[i]:6);

  writeln;

  end.

  程序2:

  program kspv;

  const n=7;

  type

  arr=array[1..n] of integer;

  var

  a:arr;

  i:integer;

  procedure quicksort(var b:arr; s,t:integer);

  var i,j,x:integer;

  begin

  i:=s;j:=t;x:=b[i];

  repeat

  while (b[j]>=x) and (j>i) do j:=j-1;

  if j>i then begin  b[i]:=b[j];i:=i+1;end;

  while (b[i]<=x) and (i<j) do i:=i+1;

  if i<j then begin b[j]:=b[i];j:=j-1; end

  until i=j;

  b[i]:=x;

  i:=i+1;j:=j-1;

  if s<j then quicksort(b,s,j);

  if i<t then quicksort(b,i,t);

  end;

  begin

  write('input data:');

  for i:=1 to n do read(a[i]);

  writeln;

  quicksort(a,1,n);

  write('output data:');

  for i:=1 to n do write(a[i]:6);

  writeln;

  end.

首页 上一页 下一页 尾页

相关推荐

点击查看更多
重点初中
首页 导航