C++ сортировки, проблемы с кодом, переполнение стэка

Компьютеры программирование программы C++

Код довольно простой
void CocktailSort(int arr[],int start,int n)
{
int left,right;
left = start;
right=n-1;
do
{
for (int i=right;i>=left;i--)
if (arr[i-1]>arr[i])
std::swap(arr[i-1],arr[i]);
left++;
for (int i=left;i>=right;i++)
if (arr[i-1]>arr[i])
std::swap(arr[i-1],arr[i]);
right--;
}
while (left<=right);
return;
}

int main()
{
clock_t firstTime;
clock_t secondTime;
int a[10]={0};
for (int i=0;i<10;i++)
a[i]=rand() % 100;
firstTime = clock();
CocktailSort(a,0,10);
firstTime=clock()-firstTime;
std::cout<<firstTime;
return 0;
}
но программа зависает и не хочет никуда меня пускать, пока я её не убью через диспетчер задач. Полагаю переполнение стэка, но сам проблемы не вижу в коде. Знатоки, подскажите пожалуйста чайнику. Заранее спасибо
Ответы:
Смущает это for (int i=left;i>=right;i++), у вас нет ограничителя, т.к. это i>=right ограничение снизу и оно никогда не будет достигнуто при инкременте i. Здесь, судя по всему, у вас и вылазит segmentation fault.
Нужно так:


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.