Я немного ржавет с 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
'ranks [5] = 2;' У вас есть неопределенное поведение –
он означает ранги [4] == 2 должно быть истинным – cokceken