找出数组中第k大小的数,输出数所在的位置(重复的计算个数)。
例如 {2,4,3,4,7}中,第一大的是7,输出位置4,第2,3大的都是4,位置1,3随便是哪一个。
本人知道用冒泡的方法冒k次就行了
有没有更快的?

解决方案 »

  1.   

    这个算法复杂度应该可以降低到O(dn),其中d是第※大。
    手上没有C++,用DELPHI写了一个:
    function getIndex(a :array of integer; index:integer):integer;
    var
      i,j,k:integer;
      n:array of integer; //保存当前第一大到第index大的索引
    begin
      SetLength(n,index);
      for j:=0 to High(n) do
        n[j] := 0;  for i:=1 to High(a) do
      begin
        for j:=0 to High(n) do
        begin
          if a[i]=a[n[j]] then
            break;
          if a[i] >a[n[j]] then
          begin
            for k:=High(n) downto j+1 do
              n[k] := n[k-1];
            n[j] := i;
            break;
          end;
        end;
      end;
      result := n[index-1];
    end;调用:
    getindex([2,4,3,4,7],1);//第一大