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

Пузырьковая сортировка. Не понимаю как работает программа

15.07.2013, 16:15. Показов 650. Ответов 1
Метки нет (Все метки)

Есть программа, которая использует пузырьковую сортировку. Не могу понять как она работает начиная с 50 строки.
Зачем там конструкции if и как работают функции ascending и descending?
В чём разница между int (*compare)(int, int) и int *compare(int, int)? В книге есть объяснение, но в чём принципиальна разница так и не понял.
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>
#include <iomanip>
 
using namespace std;
 
void bubble(int *, const int, int (*) (int, int) );
int ascending(const int, const int);
int descending(const int, const int);
 
main()
{
    setlocale(LC_ALL, "Russian");
    
    const int arraySize = 10;
    int order, a[arraySize] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
    
    cout << "Ââåäèòå 1 äëÿ ñîðòèðîâêè â âîçðàñòàþùåì ïîðÿäêå," << endl
         << "Ââåäèòå 2 äëÿ ñîðòèðîâêè â óáûâàþùåì ïîðÿäêå: ";
    cin >> order;
    cout << endl << "Ýëåìåíòû äàííûõ â èñõîäíîì ïîðÿäêå" << endl;
    
    for (int counter = 0; counter < arraySize; counter++)
        cout << setw(4) << a[counter];
        
    if (order == 1) {
        bubble(a, arraySize, ascending);
        cout << endl << "Ýëåìåíòû äàííûõ â âîçðàñòàþùåì ïîðÿäêå"
             << endl;
    }
    else {
        bubble(a, arraySize, descending);
        cout << endl << "Ýëåìåíòû äàííûõ â óáûâàþùåì ïîðÿäêå"
             << endl;
    }
    for (int counter = 0; counter < arraySize; counter++)
        cout << setw(4) << a[counter];
        
    cout << endl;
    return 0;
}
 
void bubble(int *work, const int size, int (*compare)(int, int))
{
    void swap(int *, int *);
    
    for (int pass = 1; pass < size; pass++)
    
        for (int count = 0; count < size - 1; count++)
        
            if ((*compare)(work[count], work[count + 1]))
                swap(&work[count], &work[count + 1]);
}
 
void swap(int *element1Ptr, int *element2Ptr)
{
    int temp;
    
    temp = *element1Ptr;
    *element1Ptr = *element2Ptr;
    *element2Ptr = temp;
}
 
int ascending(const int a, const int b)
{
    return b < a;
}
 
int descending(const int a, const int b)
{
    return b > a;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2013, 16:15
Ответы с готовыми решениями:

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

Не понимаю, как работает программа
// Programm F 61 // Преобразование Fixed-Float # include stdio.h; # include conio.h; # include...

Не понимаю как работает программа
Только изучаю программирование. В общем, try/catch, судя по всему, прога просто в первый catch идет...

Не понимаю,как работает программа
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

1
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.07.2013, 16:56 2
Цитата Сообщение от guitarman Посмотреть сообщение
В чём разница между int (*compare)(int, int) и int *compare(int, int)?
В первом случае compare - указатель на функцию, которая принимает два параметра типа int и возвращает int, во втором случае compare - функция, которая принимает два параметра типа int и возвращает указатель на int.

Добавлено через 7 минут
Функция bubble() третьим параметром принимает такой указатель на функцию. Значит, при вызове bubble(), третьим параметром в неё можно передавать имя (а это и есть указатель на функцию) любой функции, которая принимает два int и возвращает int.

Добавлено через 3 минуты
Что и делается в main():
C++
1
2
3
4
5
...
bubble(a, arraySize, ascending);
...
bubble(a, arraySize, descending);
...
Добавлено через 12 минут
Цитата Сообщение от guitarman Посмотреть сообщение
как работают функции ascending и descending?
Сравнивают две переменные и если условие выполняется, то возвращают 1 (или не 0), если не выполняется, то возвращают 0.

Добавлено через 3 минуты
Цитата Сообщение от guitarman Посмотреть сообщение
Зачем там конструкции if
А if() проверяет, возвращаемое этими функциями, значение.
Если вернулся не 0, то делает swap(), если - 0, то не делает.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2013, 16:56

Не понимаю как работает программа
Всем привет! Не так давно занялся изучением асма... Занимаюсь в основном по Калашникову. Сейчас я...

Не понимаю как работает данная программа
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; const int...

Расположить элементы массива по возрастанию (пузырьковая сортировка не работает)
нужно расположить элементы массива по возврасттанию, хотел воспользоваться пузырьковой сортировкой,...

программа работает алгоритм работы понимаю только как некоторые фрагменты кода работают не понятно!
вопросы написал в комментариях посмотрите пожалуйста! using System; using...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru