The most likely culprit is cabling. You can use a little known trick of the trade to investigate - shift into the lowest gear (largest sprocket at the back) normally, then without turning either wheel or crank click the rear shifter into the highest gear - the result is that since the rear mech remain trapped by the chain close to the largest sprocket, the gear cable will become slack, allowing you to ease the housings off the cable stops effortlessly without needing to release the inner cable from the rear mech - quick and handy huh?
At this point by sloshing the housings along the gear inner cable, you can feel for any friction, look for broken strand, kink, rust or gunge, allowing you to decide whether you need to clean/lubricate/replace inner wire and/or housing as appropriate. In your case, if I were you I would also pull one or more of the ferrules off to check and be sure the housings that have been used are truly gear cable housing with multiple inline strands, not brake cable housing with a single spiral wire - the misuse of the latter is unfortunately not uncommon due to numpty/unscrupulous shops/mechanics... The visual difference is shown below.
Another benefit of easing the ferrules off the housings is that it will allow you to examine whether they have been fitted correctly - housings should be cut clean and square to fit snuggly into correctly sized ferrules - ill fitting ferrule is another possible cause for unstable indexing.