请问大家,我现在一个1000000的数组,我想把它们里的内容打乱,而且速度要快,如何实现???请大家帮忙!!!

解决方案 »

  1.   

    //做循环
    var ii,jj: Integer;
        temp: String;
    randomize;
    for ii:= 0 to 1000000 - 1 do
    begin
      jj := random(1000000);
      temp := arr[ii];
      arr[ii] := arr[jj];
      arr[jj] := temp;
    end;
      

  2.   

    不同意genphone_ru(改行去学VC) 的做法,因为random有可能重复,也有可能不能覆盖完所有数组元素。
      

  3.   

    正确做法是定义一个记录类型,记录有两个部分,一个是原始的数组中的元素,一个才是random生成的数据,也就是首先生成一个记录数组。然后,按random数据将记录数组排序,然后把数据转入另一数组,就完成了。
      

  4.   

    type
      rec=record
         val:extended;
         ran:extended;
      end;
      trecarr=array of rec;
      tarr=array of extended;
      
    procedure TForm1.Button1Click(Sender: TObject);
    var arr1,arr2:tarr;
        recarr:trecarr;
        i:integer;
    begin
      setlength(arr1,1000000);
      setlength(arr2,1000000);
      setlength(recarr,1000000);
      for i:= 1 to 1000000 do
        arr1[i-1]:=random(1000000);
      for i:=1 to 1000000 do
        begin
          recarr[i-1].val :=arr1[i-1];
          recarr[i-1].ran :=random(1000000);
        end;
      //这里再自己写一个过程按ran将recarr排序;代码太多了,我不写了,可用冒泡法等。
      for i:=1 to 1000000 do
        begin
          arr2[i-1]:= recarr[i-1].val;
        end;
    end;