A[0..n-1],B[0..m-1],n>m
意思找出数组A中m个小的数组给数组B
例如数组A[1,5,0,9,12,8,3,7),数组B[4]
求B[0,1,3,5]
条件:不能改变数组A的值,不用用其它数组.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i,j,m:integer;
    A :array[0..9] of integer;
    B :array of integer;
    OutStr:String;
    begin
    A[0]:=2;
    A[1]:=5;
    A[2]:=3;
    A[3]:=9;
    A[4]:=6;
    A[5]:=17;
    A[6]:=23;
    A[7]:=12;
    A[8]:=0;
    A[9]:=8;
    OutStr:='';
    m:=7;
    SetLength(B,m);
    for j:=0 to m do
      begin
        if j=0 then
          begin
            B[j]:=A[0];
              for i:=low(A) to high(A) do
                begin
                  if (A[i]<B[j]) then B[j]:=A[i];
                end;
          end
        else
          begin
            B[j]:=A[0];
              for i:=low(A) to high(A) do
                begin
                  if (A[i]>B[j]) then B[j]:=A[i];
                end;
              for i:=low(A) to high(A) do
                begin
                  if (A[i]<B[j]) and (A[i]>B[j-1]) then B[j]:=A[i];
                end;
          end;
      OutStr:=OutStr+'  '+IntToStr(B[j]);
      end;
      ShowMessage('BÊý×éΪ'+OutStr);
    end;答案是出来了.谁能不能帮我优化一下..
      

  2.   

    用插入排序procedure TForm1.Button1Click(Sender: TObject);
    var
      i, j, n, m: Integer;
      A: array[0..9] of Integer;
      B: array of Integer;
      OutStr: String;
    begin
      A[0] := 2;
      A[1] := 5;
      A[2] := 3;
      A[3] := 9;
      A[4] := 6;
      A[5] := 17;
      A[6] := 23;
      A[7] := 12;
      A[8] := 0;
      A[9] := 8;
      OutStr := '';
      m := 7;
      SetLength(B, m);
      for i := 0 to 9 do
      begin
        n := -1;
        for j := 0 to Min(i - 1, m - 1) do
          if A[i] > B[j] then
            n := j
          else
            Break;
        if n > m - 2 then
          Continue;
        for j := m - 1 downto n + 2 do
          B[j] := B[j - 1];
        B[n + 1] := A[i];
      end;
      for i := 0 to m - 1 do
        OutStr := OutStr + ' ' + IntToStr(B[i]);
      ShowMessage('B:'+ Trim(OutStr));
    end;
      

  3.   

    为什么你这个B不会溢出呢?m+3时候也不会溢出.  
        for i := 0 to m + 3 do
        OutStr := OutStr + ' ' + IntToStr(B[i]);条件m<n