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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 21:11   #1
SimplyLesya
 
Регистрация: 22.11.2009
Сообщений: 3
По умолчанию Сортировка пузырьком на итераторах

вот код, компилятор ошибок не выдает, но при запуске программа схлоопывается.. почему? что не так?
заранее спасибо)


Код:
#include<vector>
#include<iostream>
#include<conio.h>
#include<ctime>
#include<windows.h>

using namespace std;
vector<int> Vec;
void Form(vector<int> &);
void Sort(vector<int> &);

void main(void)
{
  Form(Vec);
  Sort(Vec);
  getch();
}

void Form(vector<int> &FVec)
{ 
  srand(time(0));
  for(int i=0; i<10; i++)
  {
  FVec.push_back(rand()%10);
  cout<<FVec[i]<<' ';
  }
  cout<<endl;
}

void Sort(vector<int> &SVec)
{
 SYSTEMTIME sm;
 GetSystemTime(&sm);
 cout<<sm.wMilliseconds<<endl;
 vector<int>::iterator iteri;
 vector<int>::iterator iterj;
 iteri=SVec.begin();
 iterj=SVec.end()-1;

 int help=0;
 for (int z=0;z<1000;z++)
 {
 while(iteri!=SVec.end())
 { 
	 while(iterj>iteri)
	 {
	   if (*(iterj-1)>*iterj)
	   { 
		   help=*iterj;
		   *(iterj-1)=*iterj;
		   *iterj=help;
	   }
	   iterj++;
	 }
	iteri++;
 }
 }
 iterj=SVec.begin();
  while(iterj!=SVec.end())
  {
	 cout<<*iter<<' ';
	 iter++;
  }
     cout<<endl;
SYSTEMTIME sm1;
GetSystemTime(&sm1);
cout<<sm1.wMilliseconds<<endl;

}

Последний раз редактировалось JTG; 18.09.2010 в 22:09.
SimplyLesya вне форума Ответить с цитированием
Старый 18.09.2010, 22:50   #2
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

У вас ошибка в том, что итератор iterj должен уменьшаться, а вы его увеличиваете, следовательно выходите за границу вектора:
Код:
...
while(iteri!=SVec.end())
 { 
	 while(iterj>iteri)
	 {
	   if (*(iterj-1)>*iterj)
	   { 
		   help=*iterj;
		   *(iterj-1)=*iterj;
		   *iterj=help;
	   }
	   iterj--;
	 }
	iteri++;
 }
...
Tema_Crazzzy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка шейкер-пузырьком (Delphi) Biker29 Помощь студентам 6 25.08.2013 12:16
Шейкер-сортировка пузырьком Biker29 Общие вопросы Delphi 2 11.12.2010 22:56
стандартная сортировка пузырьком. параллельное программирование. lamont61 Помощь студентам 2 11.12.2009 15:12