Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.09.2022
Сообщений: 6

Глупая сортировка и гномья сортировка

22.12.2022, 01:03. Показов 1125. Ответов 2

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Не работает гномья сортировка и не понимаю почему, если в строчках функции Stupid for (int j=0; j < size; j++)
{
for (int i = 0; i < size-1; i++)
{
изменить size на sizeof(array), то перестает работать глупая сортировка, но начинает работать гномья. Помогите пожалуйста

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include <iostream>
#include <chrono>
#include <cassert>
using namespace std;
template <typename T>
class Vector
{
    private:
    int lenght;
    T* array;
    public:
    Vector()
    {
        lenght(0);
    }
    Vector(int n)
    {
        lenght = n;
        assert(lenght>=0);
        if(lenght>0)
        {
            array = new T[n];     
        }
        else
            array=nullptr;
    }
 
    ~Vector()
    {
        delete[] array;
    }
 
    int size()
    {
        return lenght;
    }
 
    T& operator[](int index) 
    {
        return array[index];
    }
 
    void swap(int it1, int it2) 
    {
        T value;
        value = array[it1];
        array[it1] = array[it2];
        array[it2] = value;
    }
    void outputVector()
    {
        std::cout << "Your array is: " << std::endl; 
        for (int i = 0; i < lenght; i++)
        std::cout << array[i] << ' '; std::cout << std::endl;
    }
 
    //Гномья сортировка
    void Gnom(int size, int* iterat1, int* permut1)
    {
        int it = 0;
        int per = 0;
        int i = 1;
 
        while (i < size)
        {
            it++;
            if (array[i] < array[i - 1])
            {
                swap(i, i - 1);
                per++;
                if (i > 1)
                    i--;
                else
                    i++;
            }
            else
                i++;
        }
 
        *iterat1 = it;
        *permut1 = per;
    }
    
    void Stupid(int size, int* iterat, int* permut)
    {
        int it = 0;
        int per = 0;
        double temp=0;
        
        for (int j=0; j < size; j++)
        {
            for (int i = 0; i < size-1; i++) 
            {
                it++;
                if (array[i] > array[i + 1])
                {
                    per++;
                    swap(i, i+1);
                    /*temp = array[i];
                    array[i] = array[i + 1];
                    array[i + 1] = temp;*/
                    i=0;
                }
            }
        }
 
        *iterat = it;
        *permut = per;
 
    }
};
int main()
{
    int size, permut, iterat, permut1, iterat1;
    setlocale(LC_ALL, "ru");
    cout << "Введите количество элементов: ";
    cin>>size;
    Vector<int> Vec(size);
    cout << "Лучший случай:\n\n";
        for (int i = 0; i < size; i++)
        {
            Vec[i] = i + 1;
        }
        Vec.outputVector();
 
    cout << "\n\t\tГлупая сортировка:";
        auto begin1 = chrono::steady_clock::now();
        Vec.Stupid(size, &iterat, &permut);
        auto end1 = chrono::steady_clock::now();
        auto time_ns1 = end1 - begin1;
        cout << endl << "\t\t\t" << time_ns1.count() << " микросекунд\n" << "\t\t\t" << iterat << " Проверок\n" << "\t\t\t" << permut << " Перестановок\n";
        Vec.outputVector();
 
    cout << "\t\tГномья сортировка:\t";
        auto begin2 = chrono::steady_clock::now();
        Vec.Gnom(size, &iterat1, &permut1);
        auto end2 = chrono::steady_clock::now();
        auto time_ns2 = end2 - begin2;
        cout << endl << "\t\t\t"<< time_ns2.count() << " микросекунд\n" << "\t\t\t" << iterat1 << " Проверок\n" << "\t\t\t" << permut1 << " Перестановок\n";
        Vec.outputVector();
 
    cout << "\nХудший случай\n\n";
        for (int i = 0; i < size; i++)
        {
            Vec[i] = size - i;
        }
        Vec.outputVector();
 
    cout << "\n\t\tГлупая сортировка:\n";
        auto begin3 = chrono::steady_clock::now();
        Vec.Stupid(size, &iterat, &permut);
        auto end3 = chrono::steady_clock::now();
        auto time_ns3 = end3 - begin3;
        cout << endl << "\t\t\t" << time_ns3.count() << " микросекунд\n" << "\t\t\t" << iterat << " Проверок\n" << "\t\t\t" << permut << " Перестановок\n";
        Vec.outputVector();
 
    cout << "\t\tГномья сортировка:\t";
        auto begin4 = chrono::steady_clock::now();
        Vec.Gnom(size, &iterat1, &permut1);
        auto end4 = chrono::steady_clock::now();
        auto time_ns4 = end4 - begin4;
        cout << endl << "\t\t\t" << time_ns4.count() << " микросекунд\n" << "\t\t\t" << iterat1 << " Проверок\n" << "\t\t\t" << permut1 << " Перестановок\n";
        Vec.outputVector();
 
    cout << "\nСлучайный случай\n\n";        
        for (int i = 0; i < size; i++)
        {
            Vec[i] = rand();
        }
        Vec.outputVector();
 
    cout << "\n\t\tГлупая сортировка:\n";
        auto begin5 = chrono::steady_clock::now();
        Vec.Stupid(size, &iterat, &permut);
        auto end5 = chrono::steady_clock::now();
        auto time_ns5 = end5 - begin5;
        cout << endl << "\t\t\t" << time_ns5.count() << " микросекунд\n" << "\t\t\t" << iterat << " Проверок\n" << "\t\t\t" << permut << " Перестановок\n";
        Vec.outputVector();
 
    cout << "\t\tГномья сортировка:\t";
        auto begin6 = chrono::steady_clock::now();
        Vec.Gnom(size, &iterat1, &permut1);
        auto end6 = chrono::steady_clock::now();
        auto time_ns6 = end6 - begin6;
        cout << endl << "\t\t\t" << time_ns6.count() << " микросекунд\n" << "\t\t\t" << iterat1 << " Проверок\n" << "\t\t\t" << permut1 << " Перестановок\n";
        Vec.outputVector();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2022, 01:03
Ответы с готовыми решениями:

Оптимизированная гномья сортировка и улучшенная гномья сортировка это одно и тоже?
Мне задали задание написать работающий код улучшенной гномьей сортировки для массива. Я знаю лишь оптимизированную. Информации про...

Гномья сортировка
На заводе выпускается несколько наименований деталей . Сведения о деталях включают код детали , количество выпущенных , номер месяца...

Гномья сортировка
Здравствуйте! Есть алгоритм гномьей сортировки. Нужно после каждой итерации вывести результат сортировки, таким образом, показывая процесс...

2
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.12.2022, 15:10
А зачем ты size передаёшь? Размер известен внутри.
0
106 / 93 / 44
Регистрация: 26.07.2015
Сообщений: 197
22.12.2022, 16:53
В сортировке Stupid цикл по j выглядит очень подозрительно, ведь внутри цикла эта самая j не используется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        for (int j=0; j < size; j++)
        {
            for (int i = 0; i < size-1; i++) 
            {
                it++;
                if (array[i] > array[i + 1])
                {
                    per++;
                    swap(i, i+1);
                    /*temp = array[i];
                    array[i] = array[i + 1];
                    array[i + 1] = temp;*/
                    i=0;
                }
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2022, 16:53
Помогаю со студенческими работами здесь

Гномья сортировка (массивы)
Помогите написать программу &quot;гномьей сортировки&quot;.

Гномья сортировка для матриц в С
Здравствуйте. Напишите, пожалуйста, код для гномьей сортировки матрицы.

Глупая сортировка
Здравствуйте, пишу в отчаянии. Перепробовал уже всё. int main(int argc, char *argv) { int temp,cnt1,cnt2,i,n; n=0; ...

Глупая сортировка массива
Идея состоит в том, что бы идти по массиву справа на лево и искать меньший элемент чем предыдущий, и если таковой нашёлся - поменять их...

Застрял в цикле. Глупая сортировка матрицы
Было дано задание. Отсортировать строки матрицы по сумме их элементов. Написал такую программу, основанную на методе &quot;глупой...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru