使用间接排序能够维持原数据的顺序,在某些情况下很有作用。
首先初始化rank数组:
for(int i=1; i<=n; i++) rank[i]=i;
不再对数据进行直接排序,而是对rank数组进行排序:
sort(rank+1,rank+n+1,cmp);
cmp函数要涉及到真正要排序的数据:
bool cmp(int x,int y)
{
return a[x]>a[y];
}
最后,使用时和往常一样对i进行操作:
for(int x=1; x<=n; x++){
i=rank[x];
//some sentences...
}