This is a problem with embedded systems. They have limited memory for work.
My answer is 2 parts.
1. The best view in the algorithmic perspective
Hands down do not make sense, at least to talk about using types of bubbles, inserts, choices, because they are not very effective in a reasonable size and performance.
Below are some advanced sortings with the worst temporal and spatial complexity.
Quick Sort, O (nn) ---- O (nlog (n))
Combine sorting, O (n * log (n)) ---- O (n)
Tim sort, O (n * log (n)) ---- O (n)
Heap Sort, O (n * log (n)) ---- O (1)
shell sort, O (n * log (n) ^ 2) ---- O (1)
Bucket Sort, O (n * n) ---- O (n)
Radix sort, O (nk) ---- O (n + k)
So, since you need to save memory and speed up processing time, I think heap sorting will be the best alternative here, since in worst cases it also works under O (n * log (n)) and O (1) time and space complexity .
2. Performance
Since high performance is critical to this scenario, you are considering code optimization using EEPROM and expanding memory .