我用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