#include <stdio.h>
#include <string.h>
void shift_positives(int values[], int num_values) {
int left = 0;
int temppoint=-1;
for (int right = 0; right < num_values; right++)
if (values[right] > 0)
temppoint=(temppoint==-1)?right:temppoint;
else if(temppoint!=-1)
{
memcpy(values+left,values+temppoint,sizeof(int)*(right-temppoint));
left+=right-temppoint;
temppoint=-1;
}
memset(values+left,0,sizeof(int)*(num_values-left+1));
}
int main(void) {
int data[] = {1,0,99,-1,-2,3,-5};
shift_positives(data, 7);
for (int i = 0; i < 7; i++) {
printf("%d -> %d\n", i, data[i]);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCgp2b2lkIHNoaWZ0X3Bvc2l0aXZlcyhpbnQgdmFsdWVzW10sIGludCBudW1fdmFsdWVzKSB7CiAgICBpbnQgbGVmdCA9IDA7CiAgICBpbnQgdGVtcHBvaW50PS0xOwogZm9yIChpbnQgcmlnaHQgPSAwOyByaWdodCA8IG51bV92YWx1ZXM7IHJpZ2h0KyspCiAgICAgaWYgKHZhbHVlc1tyaWdodF0gPiAwKQogICAgICAgICB0ZW1wcG9pbnQ9KHRlbXBwb2ludD09LTEpP3JpZ2h0OnRlbXBwb2ludDsKICAgICBlbHNlIGlmKHRlbXBwb2ludCE9LTEpCiAgICAgICAgIHsKICAgICAgICAgbWVtY3B5KHZhbHVlcytsZWZ0LHZhbHVlcyt0ZW1wcG9pbnQsc2l6ZW9mKGludCkqKHJpZ2h0LXRlbXBwb2ludCkpOwogICAgICAgICBsZWZ0Kz1yaWdodC10ZW1wcG9pbnQ7CiAgICAgICAgIHRlbXBwb2ludD0tMTsKICAgICAgICAgfQogICAgbWVtc2V0KHZhbHVlcytsZWZ0LDAsc2l6ZW9mKGludCkqKG51bV92YWx1ZXMtbGVmdCsxKSk7Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBkYXRhW10gPSB7MSwwLDk5LC0xLC0yLDMsLTV9OwoJc2hpZnRfcG9zaXRpdmVzKGRhdGEsIDcpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCA3OyBpKyspIHsKCQlwcmludGYoIiVkIC0+ICVkXG4iLCBpLCBkYXRhW2ldKTsKCX0KCXJldHVybiAwOwp9