Для сортировки по второму варианту потребуются копии строк с использованием промежуточного буфера или подкачки на основе байтов / блоков.Вероятно, это будет «медленнее», чем простое перемещение указателей.
И наоборот, использование указателей на фактические строковые литералы означает только замену указателей при сортировке.Таким образом, вполне вероятно, что это будет «быстрее».
Более того, вероятно , что ваши строковые литералы будут упакованы компилятором ближе друг к другу в памяти, что может помочь повысить производительность кэша, предполагая, что вына самом деле нужно отсортировать намного большее количество строк, чем 3.
Однако для приведенного вами примера.Это не совсем ясно.В системе с более крупными собственными типами (например, указателями или специальными усовершенствованиями SIMD) вполне возможно, что обмен строками в двумерном массиве может быть оптимизирован до такой степени, что вы едва сможете измерить разницу.Хотя это сильно зависит от базовой архитектуры памяти и от того, сильно ли она заботится о выравнивании.
Наконец, если у вас очень большой двумерный массив, его нужно будет размещать либо статически, либо накуча, так как она может не помещаться в стек.
И, конечно, вы можете начать видеть измеримые различия только при очень больших размерах массива.Использование примера с 3 строками довольно нелепо.