Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
13 / 13 / 0
Регистрация: 17.05.2012
Сообщений: 80

Алгоритм сортировки

17.05.2012, 08:44. Показов 3695. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пацаны ребята помогите, реализовал два алгоритма на C++, алгоритм сортировки пирамидальный(кучей) и быстрой сортировки, все они сортируют массив в любом случае, но иногда например ввожу последовательность 2 1 3 45 12 5 23 6 4 89 2 он ее сортирует так: 0 1 2 2 3 4 5 12 23 45 и все и не дописывает в конце последний элемент, если на выходи когда массив уже отсортирован в цикле когда его отображаю, число итераций увеличить на единицу т е итераций больше чем размер массива, то тогда все получается и он дописывает недостающий символ в конце, но нуль остается в самом начале. вопрос, почему появляется нуль и как от него избавиться? спасибо

вот код:

быстрая сортировка:

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
#include <iostream>
using namespace std;
 
void qicksort(int *a, int p, int r);
int partition(int *a, int p, int r);
 
int main(int argc, char *argv[])
{
 
    int *a;
    int size;
 
    cin >> size;
 
    a=new int (size);
 
    for(int i=0; i<size; i++)
    {
        cin >> a[i];
    }
 
    qicksort(a,0,size);
 
    for(int i=0; i<size; i++)
    {
        cout << a[i] << " ";
    }
 
    return 0;
}
 
void qicksort(int *a, int p, int r)
{
 
    int q;
 
    if(p<r)
    {
        q=partition(a,p,r);
        qicksort(a,p,q-1);
        qicksort(a,q+1,r);
    }
 
}
 
int partition(int *a, int p, int r)
{
 
    int t,k,x,i;
 
    x=a[r];
    i=p-1;
 
    for(int j=p; j<=(r-1); j++)
    {
        if(a[j]<=x)
        {
            i++;
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
 
    k=a[i+1];
    a[i+1]=a[r];
    a[r]=k;
 
    return (i+1);
 
}
сортировка кучей или пирамидальная:

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
#include <iostream>
using namespace std;
 
void max_heapify(int *a, int i, int size);
void build_max_heap(int *a, int i, int size);
void heapsort(int *a, int i, int size);
int parent(int i);
int left(int i);
int right(int i);
 
int main(int argc, char *argv[])
{
    int *a;
    int size,i;
 
    cin >> size;
 
    i=0;
 
    a=new int(size);
 
    for(int i=0; i<size; i++)
    {
        cin >> a[i];
    }
 
    heapsort(a,i,size);
 
    for(i=0; i<size; i++)
    {
        cout << a[i] << " ";
    }
 
    delete [] a;
 
    return 0;
}
 
int parent(int i)
{
    return (i/2);
}
 
int left(int i)
{
    return (2*i);
}
 
int right(int i)
{
    return ((2*i)+1);
}
 
void max_heapify(int *a, int i, int size)
{
    int l,r;
    int largest;
    int t=0;
 
    l=left(i);
    r=right(i);
 
    if((l<=size) && (a[l]>a[i]))
    {
        largest=l;
    }
    else
    {
        largest=i;
    }
 
    if((r<=size) && (a[r]>a[largest]))
    {
        largest=r;
    }
 
    if(largest!=i)
    {
        t=a[i];
        a[i]=a[largest];
        a[largest]=t;
        max_heapify(a,largest,size);
    }
}
 
void build_max_heap(int *a, int i, int size)
{
    i=size;
 
    for(int i=(size/2); i>=0; i--)
    {
        max_heapify(a,i,size);
    }
}
 
void heapsort(int *a, int i, int size)
{
    int t=0;
 
    build_max_heap(a,i,size);
 
    for(int i=size; i>=1; i--)
    {
        t=a[0];
        a[0]=a[i];
        a[i]=t;
        size=size-1;
        max_heapify(a,0,size);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2012, 08:44
Ответы с готовыми решениями:

Алгоритм сортировки
учитель попросил написать сортировку массива по возрастанию в общем виде #include &lt;stdio.h&gt; #include &lt;string.h&gt; int...

Алгоритм сортировки
Здравствуйте, подскажите пожалуйста какой алгоритм можно использовать при решении такой задачи: Дана строка char * из букв и цифр...

Алгоритм сортировки
Дан одномерный масив. мне в нем нужно отсортировать по возростанию только те числа масива которые простые, а остальные оставить на той...

21
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
18.05.2012, 12:05
Студворк — интернет-сервис помощи студентам
mmd, Разберите мой алгоритм, который на delphi, если не получается, то напишите...В таком случае я попробую разобрать ваш алгоритм, но доказать правильность алгоритма довольно сложно, особенно если это Qsort 3
0
13 / 13 / 0
Регистрация: 17.05.2012
Сообщений: 80
18.05.2012, 18:59  [ТС]
Цитата Сообщение от Ternsip Посмотреть сообщение
mmd, Разберите мой алгоритм, который на delphi, если не получается, то напишите...В таком случае я попробую разобрать ваш алгоритм, но доказать правильность алгоритма довольно сложно, особенно если это Qsort 3
я уже разобрался в чем ошибка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2012, 18:59
Помогаю со студенческими работами здесь

Алгоритм пузырьковой сортировки
#include&lt;iostream.h&gt; #define SIZE 5 void bsort (int iArray, int n); int main() { char ch; int ii; int iArray ; for(ii =...

Алгоритм сортировки Шелла
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/21/2107.htm здесь сказано, что существует, некая последовательность...

Обобщенный алгоритм сортировки
как это можно сделать??? необходимо модифицировать шаблонный класс связного списка: добавить метод, реализующий обобщенный ...

Не алгоритм быстрой сортировки
Просто как подключить эту функцию Не работаеееет #include&lt;iostream&gt; #include&lt;iomanip&gt; #include &lt;algorithm&gt; using namespace...

Алгоритм сортировки Шелла
Расписать по шагам сортровку массива с помощью алгоритма сортировки шелла:35,20,24,13,39,17,29,40,16,40,12,39,26


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru