0 / 0 / 0
Регистрация: 10.09.2014
Сообщений: 57
1

Найти количество сравнений после сортировки массива

24.10.2014, 22:40. Показов 891. Ответов 4
Метки нет (Все метки)

Нужно чтобы писала количество сравнений после сортировки массива, но я вроде все прописал
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
    
 
    #include "stdafx.h"
    #include <iostream>
    #include <iomanip>
    #include <math.h>
    #include <time.h>               // для генератора случайных чисел
    using namespace std;
     
    int iRandom( int a, int b ){
    return a + ( b - a +1) * rand()/RAND_MAX ;}
     
    int main()
    {
            srand(time(NULL));
            setlocale(0,"rus");
            /* int i - счетчик;
            int j - дополнительный счетчик;
            int c - переменная, чтобы менять местами элементы;
            int imax - переменная в которой храниться максимальное значение;
            int n - размерность массива;
            int k1, k2, k3, k4 - переменные для подсчета перестановок или сравнений;
            int *a = new int[n] - задание динамического массива */
        int n, i, j, c, imax, k1=0, k2=0, cont=1, k4=0, k3=0;
            while(cont==1)
            {
            cout << "Введите размерность массива = ";
            cin >> n;
            int *a = new int[n];
            for(i = 0; i < n; i++)
        {    
            a[i] = iRandom( -100, 100 );        
            cout << " " << a[i];                  
        }
            cout << endl << endl;  
            cout << "Сортировка массива:" << endl;   //  по возрастанию
            for (i = 0;i < n; i++)
            {
            for (j = n-1; j >= i; j--)
            {
            if (a[j-1] > a[j])
        {
            c = a[j-1];
            a[j-1] = a[j];
            a[j] = c;
            }
            }
            cout <<" "<< a[i];
            }
            cout << endl << endl;
            cout << "Сортировка методом поиска максимума (минимума):" << endl;     // по убыванию
            for (i=0;i<n;i++)
            {
            imax=i;
            for (j = i + 1; j < n; j++)
            {
        if (a[j] > a[imax])
        imax = j;
            k2 = k2 + 1;
        }
    if (imax!=i)
                    {
                            c = a[i];
                        a[i] = a[imax];
                        a[imax] = c;
                            k4 = k4 + 1;
                    }
                    cout << " " << a[i];
            }
            cout << endl;
            cout << "Количество сравнений = " << k2 << endl;
            cout << "Количество перестановок = " << k4 << endl << endl;
            cout << "Сортировка методом пузырька:" << endl;                
            for (i = 0; i < n; i++)
            {
                for (j =n-1;j > i; j--)
                {
                             if (a[j-1] > a[j])
                         {
                                     c = a[j-1];
                                     a[j-1] = a[j];
                                     a[j] = c;
                                     k3 = k3 + 1;
                             }
                             k1 = k1 + 1;
                    }
                    cout<<" "<<a[i];
            }
            cout<<endl;
            cout << "Количество сравнений = " << k1 << endl;
            cout << "Количество перестановок = " << k3 << endl << endl;
            cout << "Чтобы продолжить нажмите 1";
            cin >> cont;
            cout << endl;
            k1 = 0;
            k2 = 0;
            k3 = 0;
            k4 = 0;
            system ("PAUSE");
    }
            return 0;
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2014, 22:40
Ответы с готовыми решениями:

не правильно расчитывает время сортировки и количество сравнений и присваений
Помогите разобраться в программе не правильно расчитывает время сортировки и количество сравнений...

Алгоритм быстрой сортировки - посчитать количество перестановок и сравнений элементов массивов
Помогите пожалуйста в алгоритме быстрой сортировки посчитать количество перестановок и сравнений...

Модифицировать код сортировки так, чтобы на каждом следующем проходе количество сравнений декрементировалось
Помогите разобраться. Нужно модифицировать так, чтобы на втором проходе было 8 сравнений, на...

Для челночной сортировки определить количество сравнений и обменов
Челночная сортировка. Размерность сортируемого массива: n = 10, n = 50, n = 250. Для...

4
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
24.10.2014, 22:44 2
ZAndrey, в какой строке происходит сравнение?
0
0 / 0 / 0
Регистрация: 10.09.2014
Сообщений: 57
24.10.2014, 22:48  [ТС] 3
90 строка

Добавлено через 53 секунды
и 71 стр.
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 786
24.10.2014, 23:25 4
Рабочий пример
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
//подсчет перестановок
#include<stdlib.h>
#include <time.h>
#include <iomanip>
#include <iostream>
 
 
 
void printArray(int*, int); //прототип функции для вывода массива на печать
void bubbleSort(int*, int); //прототип
using namespace std;
int main()
{
srand(time(NULL));//для правильной работы рандома
const int size = 20;
int array[size];
for (int i=0;i<size;i++)
array[i]=1+rand()%30;//заполняем случайными числами до 30
cout << " No sorted a array" << "\n\n";
printArray(array, size);
bubbleSort (array, size);
cout << " The sorted a array" <<"\n\n";
printArray(array, size);
return 0;
}
void printArray(int *arr, int sizeOfArray) //печать массива
{
for (int k = 0; k < sizeOfArray; k++)
 
cout << arr[k]<<" ";
 
cout <<"\n\n";
}
void bubbleSort(int* arr, int sizeOfArray)
{
    int countswap=0; //счетчик обменов
    int countcompare=0; //счетчик сравнений
for(int i = 1; i < sizeOfArray; i++) // i - номер прохода
for(int j = 0; j < sizeOfArray - 1;j++) // внутренний цикл прохода
{
countcompare++;
if (arr[j ] < arr[j +1])
{
 int tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
countswap++;
}
}
cout<<"countcompare:  "<<countcompare <<"\n";
cout<<"countswap:  "<<countswap <<"\n";
cout <<"\n\n";
}
0
0 / 0 / 0
Регистрация: 10.09.2014
Сообщений: 57
24.10.2014, 23:28  [ТС] 5
Спасибо, постараюсь разобраться
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2014, 23:28
Помогаю со студенческими работами здесь

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

График зависимость количества перестановок и сравнений от размерности массива для алгоритмов сортировки
имеются массивы с размерностью от 1 до 20 с данными не отсортированными,частично...

Методы сортировки: цифровой сортировки и деревьев сравнений
помогите решить методы сортировки: цифровой сортировки и деревьев сравнений ДАНО :номер...

Два счетчика для обмена и сравнений для сортировки массива
написал два счетчика для обмена и сравнений для сортировки массива.Проблема при выводе выводится...


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

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

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