M
M
Muriam2019-04-01 06:07:38
C++ / C#
Muriam, 2019-04-01 06:07:38

How to correctly display the number of transfers and comparisons in the bubble sort of an array?

How to make the number of comparisons and transfers displayed after the bubble sorted array,
and not between the inscription "bubble sort" and the sequence "0 24 34 41 58 62 64 67 69 78"?
Current output:
5ca17ff4bba33697437723.png

#include <iostream>
#include <cstdlib>
#include <locale>
#include <conio.h>
#define SIZE 10

using namespace std;

void random_array(int array[SIZE]);
void bubble_sort(int array[SIZE]);
void select_sort(int array[SIZE]);
void shaker_sort(int array[SIZE]);


int main() 
{
    setlocale(LC_ALL, "rus");
    
    int array[SIZE];
      
    random_array(array);    
    bubble_sort(array); 
    for (int i = 0; i <= SIZE-1; i++) 
        cout << array[i] << " ";
    cout << "\n\n";

    random_array(array);
    select_sort(array); 
    for (int i = 0; i <= SIZE-1; i++) 
        cout << array[i] << " ";
    cout << "\n\n";
    
    random_array(array);
    shaker_sort(array);
    for (int i=0; i <= SIZE-1; i++)
        cout << array[i] << " ";
    cout << "\n\n";
    
     
    getch();
    return 0;
}

void random_array(int array[SIZE])
{
    cout << "исходный массив" << endl;
    for (int i=0; i<SIZE; i++) 
    {
        array[i] = rand()%100;
        cout << array[i] << " ";
    }
}

void bubble_sort(int array[SIZE])
{
    int comparison = 0;
    int transfer = 0;
    
    cout << "\nпузырьковая сортировка" << endl;       
    for (int i = 0; i < SIZE-1; i++)
  {
   
        for (int j = SIZE-2; j >= i; j--)
        {
        	comparison++;						  // инкремент сравнений
      if (array[j] > array[j+1])                              // если предыдущий элемент больше следующего
      {
        int temp = array[j];                           //
                                array[j] = array[j+1];                         // меняю их местами
        array[j+1] = temp;                            //
        transfer++;				        // инкремент пересылок
      }
    }
  }
    
    cout << "сравнений " << comparison << endl;
    cout << "пересылок " << transfer << endl;
}

void select_sort(int array[SIZE])
{    
    int min, temp;
    cout << "\nсортировка методом прямого выбора" << endl;       
  for (int i = 0; i < SIZE-1; i++) 
  { 
      min = i;                                                                // индекс минимального элемента
      for (int j = i+1; j < SIZE; j++) 
          if (array[ j ] < array[min])                                // если текущий элемент меньше минимального
                {           
        	min = j;                                                  // запоминаю его индекс
                }                  
      temp = array[i];                                                 //
      array[i] = array[min];                                        // меняю их местами
      array[min] = temp;                                           //
  }
}

void shaker_sort(int array[SIZE])
{
    int left, right, border, temp;    
    cout << "\nшейкерная сортировка" << endl;
  for (right=SIZE-1, left=0, border=-1; border!=0;)    // устанавливаю правую и левую границы
  {
      border = 0;
      for (int i=left; i<right; i++)                                 // двигаюсь слева направо
      {
          if (array[i] > array[i+1])                                 // если текущий элемент больше следующего
    { 
        	temp = array[i];               	            // 
          	array[i] = array[i+1];                            // меняю их местами
        	array[i+1] = temp;                               //
        	border = i;                                          // устанавливаю метку последней перестановки 
    }
      }   
    right = border;                                          // запоминаю правую границу
    for (int i=right; i>left; i--)                         // двигаюсь справа налево
    {
        if (array[i-1] > array[i])                        // если текущий элемент меньше следующего
        {
            temp = array[i];                              // 
      array[i] = array[i-1];                       // меняю их местами
      array[i-1] = temp;	           	     //
      border = i;                    	             // устанавливаю метку последней перестановки
        }
    }
    left = border;                           // запоминаю границу
  }
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
G
German, 2019-04-01
@Muriam

You first call a function in which this data is displayed, and after its completion, the array itself is displayed.
1. Move cout 's to the main function and make variables count data in the global scope.
2. Pass 2 variables to the function by reference and then output in main 'e after the output of the array.
3. Display an array in a function.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question