add shuffle algorithm