But this is a little hard to understand, so I have a index set up to help ease the process.
Move two indexes to change the level select's order.
Code:

$000/0 = AIZ Act 1

$001/1 = AIZ Act 2

$100 = HCZ act 1

$101 = HCZ act 2

$200 = MGZ act 1

$201 = MGZ act 2

$300 = CNZ act 1

$301 = CNZ act 2

$400 = FBZ act 1

$401 = FBZ act 2

$500 = ICZ act 1

$501 = ICZ act 2

$600 = LBZ act 1

$601 = LBZ act 2

$700 = MHZ act 1

$701 = MHZ act 2

$800 = SOZ act 1

$801 = SOZ act 2

$800 = SOZ act 1

$801 = SOZ act 2

$900 = LRZ act 1

$901 = LRZ act 2

$A00 = SSZ act 1

$A01 = SSZ act 2

$B00 = DEZ act 1

$B01 = DEZ act 2

$C00 = DDZ act 1

$1400 = Bonus Stage 1

$1500 = Bonus Stage 2

$1600 = LRZ Act 3 (Sonic's boss fight)

$1601 = LRZ Act 4 (Hidden Palace)

$1700 = DDZ Act 2 (Normal final boss?)

$4000 = Special Stage 1

$4001 = Special Stage 2

$FFFF = Sound Test

This is the IDs and the zones they stand for. I have put them in numerical order. To change the level select order move two IDs to after a zone and in the level select it will be there. But, the text is the same. Luckily, the level select text is easily editable.
Find LevelSelectText and you should see this:
Code:
LevelSelectText: