Ошибка при сортировке методом 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

введите сюда описание изображения


Ответы (0 шт):