All trades are stored in an internal array, in the order of their entry command. Thus, the array grows by 1 with every trade. Only exception is when a trade misses its entry and is never executed. In that case, the trade is not removed from the array, but instead the next entered trade occupies its space. Naturally this trade has then an earlier array position than it would have otherwise.
This mechanism was implemented to make Zorro a little faster and reduce its memory footprint especially with strategies that place a huge number of pending trades. I admit that I do not really understand your problem. If you need a certain order of trades for some reason, you must anyway copy the trade pointers into a sorted list - so why can't you use the all_trades loop and what do you intend to use instead?