Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2014, 13:47   #1
BaTpyXaaa
Пользователь
 
Регистрация: 06.11.2013
Сообщений: 40
Сообщение Быстрая обменная сортировка

Как вывести количество сравнений 'count' в функции, без повторений.


Код:
void Sort(int *arr, int left, int right)
{
int count = 0;
int i = left;
int j = right;
int x = arr[(left + right) / 2];
{
do
{
while (arr[i] < x)
{
i++;
	count++;
}
while (x < arr[j])
{
j--;
	count++;
}
if (i <= j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
	count++;
}
	count++;
} while (i < j);
if (left < j)
{
	count++;
Sort(arr, left, j);
}
if (i < right)
{
	count++;
Sort(arr, i, right);
}
}
}

int main()
{
int N;
cin>>N;
int *arr = new int [N];
for (int i = 0; i < N; i++)
arr[i] = rand() % 10;
Sort(arr, 0,N-1);
}
BaTpyXaaa вне форума Ответить с цитированием
Старый 18.11.2014, 16:37   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

либо вынести за пределы области видимости функции, т.е. сделать count глобальной:
Код:
int count = 0;
void Sort(int *arr, int left, int right)
{
	.....
}
либо сделать статической внутри функции:
Код:
void Sort(int *arr, int left, int right)
{
	static int count = 0;
	.....
}
Smogg вне форума Ответить с цитированием
Старый 18.11.2014, 17:13   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Не понял что такое без повторений. Как-то так пойдёт?
Код:
int Sort(int *arr, int left, int right)
{
int count = 0;
int i = left;
int j = right;
int x = arr[(left + right) / 2];
{
do
{
while (arr[i] < x)
{
i++;
	count++;
}
while (x < arr[j])
{
j--;
	count++;
}
if (i <= j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
	count++;
}
	count++;
} while (i < j);
if (left < j)
{
	count++;
	count += Sort(arr, left, j);
}
if (i < right)
{
	count++;
	count += Sort(arr, i, right);
}
}

  return count;
}

int main()
{
int N;
cin>>N;
int *arr = new int [N];
for (int i = 0; i < N; i++)
arr[i] = rand() % 10;
cout << "count: " << Sort(arr, 0,N-1);
}
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Быстрая сортировка(сортировка хаора) с++ LustHunter Помощь студентам 3 07.10.2011 19:37
Обменная сортировка Joker_vad Помощь студентам 1 12.11.2010 11:15
быстрая сортировка настолько быстрая Serg12 Помощь студентам 8 28.03.2010 21:31
какая из трех сортировок (обменная,исчерпыванием,выбором) самая быстрая? Cyberbest Помощь студентам 2 26.04.2008 10:34