I actually have a very specific method for doing just this. When I catch a new Pokemon I plan on using for the rest of my playthrough, I immediately get it up to the same level as all my other Pokemon, or on par with my starter if it's the first one. Whenever I get all of my Pokemon to the same level, I then sort them by how much EXP it will take to level them up again. The Pokemon that is currently closest to leveling up again goes in the first spot, the Pokemon farthest from leveling up goes in the second spot, and then I continue like that ascending up until the Pokemon second closest to leveling up is in the last spot. Then I just use whatever is in the first spot until it levels up, and when it does, I swap it with the next Pokemon that is a level below it, iterating backwards from the end.
Originally Posted by AmbipomMaster
This not only makes it easy to consistently train all my Pokemon, but it also keeps my strongest Pokemon at the back of the party and my weakest ones at the front, which I find visually, organizationally pleasing. And since the sort order is based on something that is effectively random (who goes farthest over the next level), the order changes every time and keeps things fresh instead of just a static rotation. It also gives me a chance to practice manually running sorting algorithms, although while I find this fun, I'm sure it is of little importance to anyone else.
EDIT: I typed all that out last night on my phone. To make it a little clearer, after I perform my sort when everybody is at the same level, this is something like what my party's EXP bars would looks like.
First slot: |ooooooo--------|
Second slot: |---------------|
Third slot: |o--------------|
Fourth slot: |oo-------------|
Fifth slot: |oo-------------|
Sixth slot: |oooo-----------|