我用C++有点生疏,经过一天的思考,我没有找到一种有效的计算这个问题的方法。C++按升序排列的非零值
假设我有5浮子的值的数组
lints[5]={0, 0.5, 3, 0, 0.6};
我想介绍一个新的数组: ranks[5]
包含数组绒毛的非0值的升序秩。
答案会读
ranks[1]=0;
ranks[2]=1;
ranks[3]=3;
ranks[4]=0;
ranks[5]=2;
在这个例子中,0值收益排名0,但他们不相关的,因为我只需要正值军衔。
在此先感谢
编辑: 感谢大家的帮助,这是我发现我的相适应需求,如果你有相同的任务:)
double lengths[5], ranks[5];
double temp;
int i,j;
lengths[0] = 2,lengths[1] = 0,lengths[2] = 1,lengths[3] = 0,lengths[4] = 4;
ranks[0] = 1, ranks[1] = 2, ranks[2] = 3, ranks[3] = 4, ranks[4] = 5;
for(i=0;i<4;i++){
for(j=0;j<4-i;j++){
if((lengths[j]>lengths[j+1] && lengths[j+1]) || lengths[j]==0){
// swap lenghts
temp=lengths[j];
lengths[j]=lengths[j+1];
lengths[j+1]=temp;
// swap ranks
temp=ranks[j];
ranks[j]=ranks[j+1];
ranks[j+1]=temp;
}
}
}
欢呼。
可以排序包含数字和阵列中的原来的位置的结构体的向量。排序后,您可以使用原始索引来创建想要的数组 – user463035818
'等级[5] = 2;'你有未定义的行为 –
他意味着等级[4] == 2应该是真的 – cokceken