Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 1
Регистрация: 11.01.2016
Сообщений: 67
1

Пузырьковая сортировка: исключение лишних проходов

31.10.2019, 15:20. Показов 480. Ответов 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include "stdafx.h"
#include <memory.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
 
 
struct intvector
{
    int * data;
    unsigned int size;
    unsigned int capacity;
};
 
struct intvector * create(unsigned int capacity)
{
    struct intvector * result = (intvector*)malloc(sizeof(struct intvector) * 1);
    result->size = 0;
    result->capacity = 256;
 
    result->data = (int*)calloc(result->capacity, sizeof(int));
 
    return result;
}
 
void push_back(struct intvector * vector, int element)
{
    if (vector->size == vector->capacity)
    {
        vector->capacity = 2;
        vector->data = (int*)realloc(vector->data, sizeof(int) * vector->capacity);
    }
 
    vector->data[vector->size] = element;
    vector->size += 1;
}
 
int get(struct intvector * vector, unsigned int index)
{
    if (index >= vector->size)
    {
        printf("ERROR OUT OF RANGE");
        exit(-1);
    }
 
    return vector->data[index];
}
 
 
 
 
 
void swap(struct intvector * vector, unsigned int left, unsigned int right)
{
    if (left >= vector->size || right >= vector->size)
    {
        printf("ERROR OUT OF RANGE");
        exit(-1);
    }
 
    int tmp = vector->data[left];
    vector->data[left] = vector->data[right];
    vector->data[right] = tmp;
}
 
void bulb_sort(struct intvector * vector)
{
    for (unsigned int high_index = 0; high_index != vector->size; ++high_index)
    {
 
        bool f = 0;
 
        for (unsigned int low_index = high_index + 1; low_index < vector->size; ++low_index)
        {
            int high_value = get(vector, high_index);
            int low_value = get(vector, low_index);
 
            if (high_value > low_value)
            {
                swap(vector, high_index, low_index);
              
            }
            f = 1;
         }
 
    
 
    
    for (unsigned int index = 0; index < vector->size; ++index)
    {
        printf("%d,", get(vector, index));
 
    }
 
 
        if (f == 0)
        break;
 
    }
 
}
 
}
 
int main()
{
    struct intvector * vector = create(1);
 
 
    srand(time(NULL));
    unsigned int count = 6;
    printf("Size: %d\n", count);
    for (int value = 0; value != count; ++value)
    {
        push_back(vector, rand() % 4);
    }
 
    for (unsigned int index = 0; index < vector->size; ++index)
    {
        printf("%d,", get(vector, index));
    }
 
    printf("\n\n");
    simple_sort(vector);
 
    for (unsigned int index = 0; index < vector->size; ++index)
    {
        printf("%d,", get(vector, index));
    }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2019, 15:20
Ответы с готовыми решениями:

Пузырьковая сортировка
Необходимо составить перестановку пузырьком одномерного массива на языке С с помощью указателей и...

Пузырьковая сортировка
Добрый день, подскажите, почему в этой программе никогда не срабатывает цикл, мы никогда не входим...

Пузырьковая сортировка
Можете подробно обьяснить программу??? int main(int argc, char *argv) { int i,j,n,mas,c,k;...

Пузырьковая сортировка
Добрый день, Подскажите где ошибся, не могу понять: #include &lt;stdio.h&gt; int main () { ...

1
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
31.10.2019, 16:11 2
Цитата Сообщение от vinni81 Посмотреть сообщение
vector->capacity = 2;
100% какая-то херня...
Цитата Сообщение от vinni81 Посмотреть сообщение
struct intvector * result = (intvector*)malloc(sizeof(struct intvector) * 1);
struct явно тут лишнее, выделять память тоже не обязательно так...
Цитата Сообщение от vinni81 Посмотреть сообщение
low_index = high_index + 1
Индекс_меньшего = индекс_большего +1; интересно...

Суть флага, насколько я понимаю: если перестановок не было - значит уже все ОК.
Значит, перед каждым проходом устанавливаем флаг в ОК, при свапе - сбрасываем его, в конце прохода проверяем и если ОК - брекаем цикл.

Ошибки - сброс флага не там, отсутствует проверка после прогона.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2019, 16:11

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Пузырьковая сортировка. Функции
Есть задание. Сделать пузырьковую сортировку. С использованием функций. Написал что знаю, но все...

Пузырьковая сортировка работает некорректно
Первая моя лаба)) Задан массив положительных чисел A. Для каждого А среди элементов массива,...

Пузырьковая сортировка, в чем ошибка?
Скажите, пожалуйста, в чем моя ошибка? int main() { int n,*a,c,j,i; scanf(&quot;%d&quot;,&amp;n); ...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.