Если бы это был я, я бы создал список указателей на строки. То есть список адресов каждой строки. Затем вы напишите подпрограмму, сравнивающую две строки с учетом их указателей. Затем, когда вам нужно поменять местами строки, вы просто поменяете местами указатели.
Вы хотите не менять местами сами строки, так как они могут быть плотно упакованы, поэтому вам придется много сдвигать, чтобы переместить дыры в памяти. Указатели просто поменять местами. Вы могли бы поменять строки проще, если бы они были фиксированной длины (или меньше), тогда вам не пришлось бы беспокоиться о перемещении дыр в памяти.
Но сортировка списка указателей - действительно горячая подсказка.
Чтобы сравнить строки, самый простой способ - перебирать каждый символ каждой строки и вычитать их друг из друга. Если результат равен 0, они равны. Если нет, то если результат> 0, то первая строка находится перед другой строкой, в противном случае вторая строка ниже, и вы должны поменять их местами. Если вы исчерпали одну из строк перед другой, и они полностью совпадают с этой точкой, более короткая строка меньше, чем более длинная.