这个算法复杂度应该可以降低到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;