切换到宽版
  • 5294阅读
  • 4回复

求 快排 [复制链接]

上一主题 下一主题
离线genius
 
只看楼主 正序阅读 0 发表于: 2007-11-12
..
这个哪里错了啊。
[ 此贴被genius在2007-11-12 21:05重新编辑 ]
离线suifeng
只看该作者 4 发表于: 2007-11-15
到网上搜呀!既快又方便!
离线121371490
只看该作者 3 发表于: 2007-11-12
嘿嘿!
这是我的!
离线121371490
只看该作者 2 发表于: 2007-11-12
var
    x:array[1..25000]of integer;
    i,n:integer;
procedure qsort(v1,v2:integer);
var i,j,t:integer;
    mid:integer;
begin
  i:=v1;j:=v2;mid:=x[(i+j) div 2];
  while i<j do
      begin
        while mid>x do inc(i);
        while mid<x[j] do dec(j);
        if i<=j then
            begin t:=x;x:=x[j];x[j]:=t;inc(i);dec(j);end;
      end;
  if v1<j then qsort(v1,j);
  if i<v2 then qsort(i,v2);
end;
begin
    readln(n);
    for i:=1 to n do
          read(x);
    qsort(1,n);
    for i:=1 to n do
          write(' ',x);
end.
离线cjrzh
只看该作者 1 发表于: 2007-11-12
错的很严重
一般书上都有标程的
我把我的程序给你吧
program quick;
var n,i:longint;
    a:array[1..100000] of longint;
procedure swap(var x,y:longint);
var t:longint;
begin
  t:=x;x:=y;y:=t;
end;
procedure qs(l,r:longint);
var i,j,x:longint;
begin
  x:=a[l];i:=l;j:=r;
  repeat
    while(i<j) and(a[j]>a) do dec(j);
    if(i<j) then begin swap(a,a[j]);inc(i);end;
    while (i<j) and(a<a[j]) do inc(i);
    if (i<j) then begin swap(a[j],a);dec(j);end;
  until i=j;
  a:=x;
  if l<i-1 then qs(l,i-1);
  if i+1<r then qs(i+1,r);
end;
快速回复
限100 字节
 
上一个 下一个