Форум программистов, компьютерный форум CyberForum.ru

Добавить счетчики сравнений и присваиваний в сортировках - C++

Восстановить пароль Регистрация
 
Mashka_mulashka
 Аватар для Mashka_mulashka
22 / 22 / 4
Регистрация: 13.12.2011
Сообщений: 721
13.12.2011, 10:43     Добавить счетчики сравнений и присваиваний в сортировках #1
весь семестр балду пинала,а завтра сдавать задачи.у меня есть нароботки, но задачи сделаны не до конца.

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ()
{
    setlocale(LC_ALL,"Russian");
    const int n=10;
    int x[n],i,j,q=0,z=0,k,t,m,h,temp;
    cout << "Задайте массив из " << n << " элементов для сортировки обменом" << endl;
    srand (time(NULL));
    for (i=0;i<n;i++)
        cin >> x[i];
    cout << endl;
        for (i=0;i<n;i++)
            for (j=n-1;j>i;j--,q++)
            {
        if (x[j-1]>x[j])
        {
            m=x[j-1];
            x[j-1]=x[j];
            x[j]=m;
            z++;
        }
            }
        for (i=0;i<n;i++)
        cout << x[i] << " ";
    cout << endl;
    cout << "количество сравнений = " << q << "\n";
    z=z*3;
    cout << "количество присваиваний = " << z << "\n";
    cout << endl;
    cout << "Введите тот же массив для сортировки методом выбора";
    cout << endl;
    for (i=0;i<n;i++)
        cin >> x[i];
    cout << endl;
    q=0;z=0;
    for (i=0;i<n;i++){
        int min=i;
        for(j=i+1;j<=n;j++){
                q++;
            if(x[j]<x[min]){
        min=j;
            }
        }
        if(min!=i)
        swap(x[i],x[min]);
            z++;
    
    }
    for (i=0;i<n;i++)
    cout << x[i] << " ";
    cout << endl;
    cout << "количество сравнений = " << q << "\n";
    z=z*3;
    cout << "количество присваиваний = " << z << "\n";
    cout << endl;
    int w;
    for(i=0;i<n;i++)
        cin >> x[i];
    q=0,z=0;
    for (i=1;i<n;i++)
    {
        w=x[i];
        for (j=i-1;j>=0 && (x[j] > w);j--)
        {
            q++;
            x[j+1]=x[j];
            x[j]=w;
    }
    if(i>0)
    
        z++;
    }
    
                for (i=0;i<n;i++)
    cout << x[i] << " ";
                cout << endl;
                cout << "Количество сравнений = " << q << endl;
                z=z*3;
                cout << "Количество присваиваний = " << z << endl;
    system("pause >> void");
    return 0;
    }
здесь сортировка обменом работает хорошо,а вот выбором вообще не сортирует массив и выводит неверные результаты.про вставки незнаю, может правильно может нет.

Задача 2.отсортировать массив тремя видами сортировки.Обменом,улучшеным обменом и шейкер-сортировкой.вывести количество сравнений и присваиваний.

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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void BubbleSort(int *x, const int n)
{
    int i,j,m;
    for (i=0;i<n;i++) 
       for (j=n-1;j>i;j--) 
       { 
     if (x[j-1]>x[j]) 
     { 
       m=x[j-1]; 
       x[j-1]=x[j]; 
       x[j]=m;  
     } 
       }
}
void SheikerSort(int *a, const int n) 
 { 
            int l, r, i, k, buf; 
            k = l = 0; 
            r = n - 2; 
            while(l <= r) 
            { 
               for(i = l; i <= r; i++) 
                  if (a[i] > a[i+1]) 
                  { 
                     buf = a[i]; a[i] = a[i+1]; a[i+1] = buf; 
                     k = i; 
                  } 
               r = k - 1; 
               for(i = r; i >= l; i--) 
                  if (a[i] > a[i+1]) 
                  { 
                     buf = a[i]; 
         a[i] = a[i+1]; 
         a[i+1] = buf; 
                     k = i; 
                  } 
               l = k + 1; 
            } 
         }
void Bestsort(int arr[], int L, int R) 
 { 
  if (L >= R) 
  return; 
  int m = (L + R) /2; 
  int mediana = arr[m]; 
  int LL = L; 
  int RR = R; 
  while (LL < RR) { 
  while (arr[LL] < mediana) 
  LL++; 
  while (arr[RR] > mediana) 
  RR--; 
  if (LL <= RR) { 
  int swap = arr[LL]; 
  arr[LL] = arr[RR]; 
  arr[RR] = swap; 
  LL++; 
  RR--; 
  } 
  } 
  if (LL<R) 
  Bestsort (arr , LL , R); 
  if (RR > L) 
  Bestsort (arr , L , RR); 
 }
void main(void) 
{ 
  int i;
  setlocale(LC_ALL,"Russian");
  int arr[] =  { 5, 19, 4, 7, 15, 12, 1, 6, 10, 8 }; 
  int ARR_LENGTH =  sizeof (arr) / sizeof (int); 
  Bestsort (arr , 0 , ARR_LENGTH - 1); 
  cout << "Улучшеная сортировка обменом:" << endl;;
  for (i=0; i < ARR_LENGTH; i++) 
  cout << arr[i] << " "; 
         cout << endl;
         cout << endl;
        int a[10] = {5, 19, 4, 7, 15, 12, 1, 6, 10, 8}; 
    SheikerSort(a, 10); 
    cout << "Шейкерная сортировка:" << endl;
    for(i = 0; i < 10; i++) 
        cout << a[i] << " ";
    cout << endl;
    cout << endl;
    const int n=10;
    int x[10] = {5, 19, 4 , 7 ,15 , 12 , 1 , 6 , 10 , 8};
    BubbleSort(x,10);
    cout << "Сортировка обменом: " << endl;
    for(i = 0; i < 10; i++) 
        cout << x[i] << " ";
    getchar();
   system("pause >> void");
 }
здесь работают сортировки,нужно всего-лишь добавить счетчики сравнений и присваиваний(что я не могу сделать).

Добавлено через 3 часа 48 минут
помогите пожалуйстааа((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2011, 10:43     Добавить счетчики сравнений и присваиваний в сортировках
Посмотрите здесь:

Не знаю как настроить счетчики for... C++
Счетчики C++
C++ тем кто шарит в сортировках массивах
Ключ в сортировках C++
Скорость сравнений и присваиваний C++
C++ Сортировка. Счетчики
Пирамидальная сортировка массива, счетчики C++
Куда в программе добавить счетчик для поиска количества перестановок и сравнений? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru