请教统计学中定义(众数)的算法?

解决方案 »

  1.   

    function getmode(xarr:arrd):double;
    var modecount,same,i:integer;
        former,mode:double;
    begin
      ascend(xarr);
      modecount:=0;
      former:=xarr[0];
      same:=0;
      for I:=0 to high(xarr) do      if xarr[i]=former then
            begin
              same:=same+1;
              if same>=modecount then
                 begin
                   modecount:=same;
                   mode:=xarr[i];
                 end;
            end
          else
             begin
               former:=xarr[i];
               same:=1;
             end;
       result:=mode;
    end;
    ascend是排序函数代码如下
    procedure ascend(var array1:arrd);
    var ex:boolean;
        broker:double;
        i:integer;
    begin
       ex:=false;
       if not (high(array1)<1) then
       repeat
           for i:=0 to high(array1)-1 do
           begin
             if (i=0) then ex:=false;
             if array1[i]>array1[i+1] then
               begin
                 broker:=array1[i];
                 array1[i]:=array1[i+1];
                 array1[i+1]:=broker;
                 ex:=true;
               end;
           end;
       until not ex;
    end;
    取最后一个众数,如果多于一个众数,要用多维数组,如果你要,再来问我。
      

  2.   

    注意type arrd=array of double;
      

  3.   

    for I:=0 to high(xarr) do      if xarr[i]=former then
            begin
              same:=same+1;
              if same>=modecount then
                 begin
                   modecount:=same;
                   mode:=xarr[i];
                 end;
            end
          else
             begin
               former:=xarr[i];
               same:=1;
             end;是不是錯了,每次隻能取排序後的第一個值。