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

Два счетчика для обмена и сравнений для сортировки массива - C++

Восстановить пароль Регистрация
 
Gmails
5 / 5 / 2
Регистрация: 08.04.2014
Сообщений: 241
27.04.2014, 23:15     Два счетчика для обмена и сравнений для сортировки массива #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
void bubbleSort(int* arr, int size)
{
    int countswap=0; //счетчик обменов
    int countcompare=0; //счетчик сравнений
 
int tmp, i, j;
for(i = 0; i < size - 1; ++i) // i - номер прохода
{            
for(j = 0; j < size - 1; ++j) // внутренний цикл прохода
{     
if (arr[j + 1] < arr[j]) 
countcompare++;
{
tmp = arr[j + 1]; 
arr[j + 1] = arr[j]; 
arr[j] = tmp;
countswap++;
}
  }
 }
printf("Количество сравнений: %d\n",countcompare);
printf("Количество обменов: %d\n",countswap);
}
Добавлено через 7 часов 4 минуты
пожалуйста помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 23:15     Два счетчика для обмена и сравнений для сортировки массива
Посмотрите здесь:

Функция для сортировки массива пузырьком C++
C++ Написать функцию для обмена строк двумерного массива
C++ График зависимость количества перестановок и сравнений от размерности массива для алгоритмов сортировки
C++ нужна функция для обмена строк двумерного массива на плюсах
C++ Создать два массива. Вычислить количество тех элементов каждого массива, для которых выполняется неравенство: 2<элемент массива<10
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Prgrm101
3 / 3 / 3
Регистрация: 08.04.2014
Сообщений: 20
27.04.2014, 23:41     Два счетчика для обмена и сравнений для сортировки массива #2
Сначала выводится количество обменов, потому что это происходит в функции сортировки, а она вызывается перед выводом массива.
Gmails
5 / 5 / 2
Регистрация: 08.04.2014
Сообщений: 241
28.04.2014, 12:54  [ТС]     Два счетчика для обмена и сравнений для сортировки массива #3
пожалуйста срочно нужно

Добавлено через 3 часа 8 минут
Кэп.
Мне нужно,чтоб выводило два числа(кол-во обменов и сравнений),а не набор чисел....в этом проблем,вывожу после цикла,все равно кучу чисел выводит вместо двух.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.04.2014, 13:12     Два счетчика для обмена и сравнений для сортировки массива #4
Gmails, ты сначала повтори, как работает конструкция if ! Хотя бы одну главу в книжке прочитай об этом!
Потому что с первого взгляда видно, что это чужой код, в который ты, не разобравшись, добавил свой счётчик!
Ну вот это что такое?!
C++
1
2
3
4
5
6
7
8
if (arr[j + 1] < arr[j]) 
countcompare++;
{
tmp = arr[j + 1]; 
arr[j + 1] = arr[j]; 
arr[j] = tmp;
countswap++;
}
какие инструкции должны выполняться при истинности условия, а какие при ложности? А какие предполагалось, что должны выполниться? Что должны делать фигурные скобки?
Сам себе ответь на этот вопрос.
Gmails
5 / 5 / 2
Регистрация: 08.04.2014
Сообщений: 241
28.04.2014, 13:28  [ТС]     Два счетчика для обмена и сравнений для сортировки массива #5
Не по теме.Инструкцию if знаю.Вы невнимательно прочли.Это пузырьковый метод сортировки.Код работает,проблема в выводе счетчиков(выводится числа из цикла,а нужно два числа).Если напишите как это исправить,то буду благодарен.И спасибо за ваш комментарий.
P.S:Я не писал,что это мой код)
int countswap=0; //счетчик обменов
int countcompare=0; //счетчик сравнений
if (arr[j + 1] < arr[j])
countcompare++;-считаем сравнения
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.04.2014, 14:18     Два счетчика для обмена и сравнений для сортировки массива #6
Цитата Сообщение от Gmails Посмотреть сообщение
Инструкцию if знаю.Вы невнимательно прочли.
я пришёл к выводу, что не знаешь, исходя из этого.
Цитата Сообщение от Gmails Посмотреть сообщение
countcompare++;-считаем сравнения
если бы ты ззнал инструкцию if, ты б знал, что она выполняет только одну инструкцию после себя.
Например,
C++
1
2
3
4
5
6
if (arr[j + 1] < arr[j]) 
countcompare++; //только эта инструкция будет выполняться по условию
tmp = arr[j + 1]; 
arr[j + 1] = arr[j]; 
arr[j] = tmp;
countswap++;
добавление фигурных скобок решает проблему, но скобки должны идти сразу после условия if
А тебе наоборот надо, чтобы эта строчка вообще выполнялась при любом исходе условия, то есть
C++
1
2
3
4
5
6
7
8
countcompare++;
if (arr[j + 1] < arr[j]) 
{
tmp = arr[j + 1]; 
arr[j + 1] = arr[j]; 
arr[j] = tmp;
countswap++;
}
Gmails
5 / 5 / 2
Регистрация: 08.04.2014
Сообщений: 241
28.04.2014, 18:42  [ТС]     Два счетчика для обмена и сравнений для сортировки массива #7
Эт понятно.Вы снова не поняли,я писал,что проблема при выводе.как вывод сделать,чтоб выводили счетчики?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 21:46     Два счетчика для обмена и сравнений для сортировки массива
Еще ссылки по теме:

Счетчик сравнений для быстрой сортировки C++
Найти количество сравнений после сортировки массива C++
Приложение для сортировки массива в MFC C++

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

Или воспользуйтесь поиском по форуму:
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
28.04.2014, 21:46     Два счетчика для обмена и сравнений для сортировки массива #8
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
#include <iostream>
 
void printArray(int*, int); //прототип функции для вывода массива на печать
void bubbleSort(int*, int); //прототип
 
using namespace std;
 
int main()
{
const int size = 25;
int array[size] = {10,56,15,100,78,
45,91,12,1,4,
7,8,533,47,2,
21,3,67,68,79,
73,27,93,22,0};
 
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";
}
Вам это нужно?
Yandex
Объявления
28.04.2014, 21:46     Два счетчика для обмена и сравнений для сортировки массива
Ответ Создать тему
Опции темы

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