Ошибка при сортировке методом quicksort
Сортирую номера методом quicksort, в какой-то момент сортировки пропадает значение ячейки массива nomer и заменяется отрицательным числом. Никак не могу понять в чем причина, с другими номерами все нормально. При этом сортировка методом вставки отлично работает. Заранее спасибо.
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <windows.h>
#include <fstream>
using namespace std;
void qcksrt(long double* nomer, int last, int first) {
long double mid, c;
int left = first, right = last;
mid = nomer[(first + last) /2 ];
do
{
while (nomer[left] < mid) left++;
while (nomer[right] > mid) right--;
if (left <= right)
{
c = nomer[left];
nomer[left] = nomer[right];
nomer[right] = c;
left++;
right--;
}
} while (left < right);
if (first < right) qcksrt(nomer, right, first);
if (left < last) qcksrt(nomer, last, left);
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
stringstream num;
char ch;
string chose, numb[25], nomerL, str[25];
ifstream f("АТС.txt");
long double nomer[25], phone;
int i = 0, time[25], tarif[25], first = 0;
cout << " До сортировки: " << endl;
while (f) {
stringstream num;
getline(f, str[i]);
num << str[i];
for (int z = 0; z < str[i].length(); z++) {
num >> chose;
if (chose == "абонент:") num >> numb[i];
}
cout << str[i] << endl;
i++;
}
i--;
cout << "Сортировка по номеру телефона. " << "Выберите метод сортировки (Q - quicksort, I - метод вставки): ";
cin >> ch;
switch (ch) {
case 'Q':
for (int l = 0; l < i ; l++) {
nomer[l] = stod(numb[l]);
}
qcksrt(nomer, i, first);
for (int k = 0; k < i; k++)
cout << fixed << setprecision(0) << nomer[k] << endl;
break;
/*case 'I':
insrt(nomerL, numb, i);
for (int k = 0; k < i; k++)
cout << numb[k];
break;
*/
default:
cout << "Вы не выбрали метод сортировки.";
break;
}
f.close();
return 0;
}
Ссылка на файл txt с номерами: https://drive.google.com/file/d/1EgpaOowt_TjrGkBvG8rrwov-SPfUUU16/view?usp=sharing
