Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 08.11.2020
Сообщений: 65
1

Некорректно сортируются данные

17.04.2021, 18:28. Показов 389. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи у Вас, дорогие знатоки! Не корите, уверена, ошибка какая-то глупая, то я только начинаю работу с C++
Есть задание, по которому мне дана база данных с именами узлов и IP-адресами, мне необходимо прохешировать, где хеш-сумма=хеш имени +хеши четырех октетов, далее бинарным поиском найти по хешу введенные с клавиатуры имя и IP. Алгоритм хеширования взяла следующий: первая буква имени + сумма октетов. Далее провожу сортировку по хешу: сначала по буквенной части, а после - по цифровой.
По буквенной части сортируется правильно, а вот по числовой какая-то фигня..
ниже - код самой сортировки и коды вызовов.
По k у меня идет коды букв, по i у меня номер элемента в порядковой очереди. Я ищу в уже отсортированном по буквам массиве хешей ту часть, где с одинаковой буквенной частью хеша несколько элементов, чтобы отсортировать их между собой по возрастанию числовой части


Код самой сортировки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void quicksort(int* mas, int* number, string* ID, string* hash, string* name, int first, int last)
{
    int  count, mid; string count_1;
    int f = first, l = last;
    mid = mas[(f + l) / 2]; //вычисление опорного элемента
    do
    {
        while (mas[f] < mid) f++;
        while (mas[l] > mid) l--;
        if (f <= l) //перестановка элементов
        {
            count = mas[f]; //это перестановка элементов массива, по которому вызывается функция
            mas[f] = mas[l];
            mas[l] = count;
          
            count_1 = hash[f]; //это перестановка элементов, отвечающих за хеш-сумму
            hash[f] = hash[l];
            hash[l] = count_1;
 
            count = number[f];  //это перестановка порядковых номеров 
            number[f] = number[l];
            number[l] = count;
 
            count_1 = name[f]; //это перестановка имен узлов
            name[f] = name[l];
            name[l] = count_1;
 
            count_1 = ID[f];  //это перестановка IP
            ID[f] = ID[l];
            ID[l] = count_1;
 
            f++;
            l--;
        }
    } while (f < l);
    if (first < l) quicksort(mas, number, ID, hash, name, first, l);
    if (f < last) quicksort(mas, number, ID, hash, name, f, last);
}


Код с вызовами функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//сортировка по буквенной части хеш-суммы
    quicksort(name_first_int, number, bd1.ID, hash, bd1.name, 0, n - 1); 
 
 
//сортировка по численной части хеш-суммы
  int d = 101;
    for (int k = /*0*/97; k < 123; k++)
    {
        int f = 0;
        for (int i = 0; i < n; i++)
        {
            if (name_first_int[i] == k)
            {
                f++;
 
                if (i < d) d = i-1;
            }
            if (f < 2) d = 101;
        }
        
       /* if (f > 0) cout<<"k = " << k <<"  f = "<< " " << f<<endl;*/ //это я вставляла для проверки самой себя
        if (f > 1)
        {
             cout << "d = " << d << "  f = " << " " << f << endl; //это тоже для проверки, какие индексы получились, d - индекс первого элемента, после которого пойдет элемент с такой же буквенной частью, f - количество таких строк 
 
            quicksort(sum_IP, number, bd1.ID, hash, bd1.name, d, d+f-1);
        }
    }
    cout << endl;
Прикрепила скрин с примером выполнения программы, в красном прямоугольнике так часть, что должна была отсортироваться по возрастанию числовой части хеша, но почему-то не отсортировалась..
Буду очень признательна!

Добавлено через 4 минуты
Прошу прощение, дубликат Некорректно сортируются данные
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2021, 18:28
Ответы с готовыми решениями:

Почему сортируются цифры в линейном списке, а фамилии не сортируются
Когда я сортирую список из цифр,он сортируется,а когда нужно вывести список книг по алфавиту ,то не...

Некорректно выводятся данные
в програмке не выводятся значения для y. на экран выводится как x= -5.00 z= 5.00 y=-10.485428...

Некорректно выводится данные в коде
Некорректно выводятся данные в полях &quot;Вид&quot; и увеличения на процент (см. скрин). Что делать? ...

Данные записываются в файл некорректно
есть программа &quot;Телефонная книга&quot;, все работает, но когда данные записываются в файл в файле помимо...

0
17.04.2021, 18:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2021, 18:28
Помогаю со студенческими работами здесь

данные из файла считываются некорректно
Добрый день! Помогите понять, почему происходит следующая ситуация: В файле: 1 2 3 4.567 1 3 4...

Некорректно сортируются данные
Прошу помощи у Вас, дорогие знатоки! Не корите, уверена, ошибка какая-то глупая, я только начинаю...

Не сортируются по алфавиту данные о производстве
Задача на создание данных о производстве (наименование товара, группа, год выпуска и т.д.) с...

Некорректно выводятся данные
Доброе утро мне нужна помощь. Есть страница которая выводит все записи с БД. Но мне же нужно...

Некорректно выводятся данные
Вывожу данные из mysql и хочу в строку их выводить, но они этого не хотят Вот код &lt;?php ...

Некорректно выводит данные
a=input() j=0 i=1 m=1 slova=0 e=0 l=len(a)-1 slova=a z=1 mm=1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru