@#$%^#$%^$%^&@#$%^
Вы сайтом ошиблись, это надо на говнокод постить.
#define вместо констант - лажа, но допустимая.
Rainberd углядел, что в самопальной сортировке классическая "ошибка копипаста". Посмотрите внимательно на вложенный цикл, там условие должно быть
j<n, а у вас - i < n
Это сегфолт номер раз.
А вот это - причина сегфолта номер два:
char *str_pr = &str[0u];
char *quality=&str2[0u] ;
В версиях до C++11 нет никаких гарантий, что это дело указывает на массив всех символов строки.
В любых версиях нет никаких гарантий, что этот адрес будет неизменным в течении жизни строки.
Кто надоумил вас использовать функционал библиотеки C для работы со строками, да еще и смешивать его с STL?
Самопальная сортировка - тоже ужас. Этот код проще переписать, чем рефакторить.
int i;
for(i=....
Откройте для себя объявление индекса внутри цикла:
for(size_t i=0...
Откройте для себя, что массивы должны индексироваться при помощи size_t, а не int.
Тут в большинстве своем код на C, с операторами C++ в некоторых местах. Печать структур просится, например, в виде дообъявления оператора << у ofstream.
Если это студенческая работа, преподавателя, который "подготовил" такого студента нужно лишить конфет и поставить в угол.