这个算法复杂度应该可以降低到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);//第一大
手上没有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);//第一大