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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 12:23   #1
Лен4икс
 
Регистрация: 27.11.2012
Сообщений: 7
По умолчанию сортировка оптим. пузырьком

Это обычная сорт пузырьком, куда вставить, и какой цыкл, чтоб этот код стал оптимизированным, подскажите пожалуйста?
#include <stdio.h>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
void RandomShuffle(char *pA,int r,int x,int n)
{
const int VECTOR_SIZE=r;
typedef vector<int> IntVector;
typedef IntVector:: iterator IntVectorIt;
IntVector Numbers(VECTOR_SIZE);
IntVectorIt start,end,it;
for(int i=0;i<r;i++)
{
Numbers[i]=x;
x=x+n;
}
start=Numbers.begin();
end=Numbers.end();
random_shuffle(start,end);
for(it=start;it!=end;it++)
{
*(pA++)=*it;
}
}
void main()
{
int r;
char v;
int i;
int vrem;
char *pArr;
printf("Set number of elements in the array:");
scanf("%i",&r);
pArr=new char [r];
printf("\r\n Check'1' for manual array initialization\r\n or '2' for random program //array initialization\r\n");
while(1)
{
printf("\r\n What is your check?:");
scanf("%i",&v);
switch(v)
{
case '1':
for(i=0;i<r;i++)
{
printf("Set Arr[%c] value:",i);
scanf("%i",pArr+i);
}
break;
case '2':
RandomShuffle(pArr,r,1,1);
break;
default:
printf("The check is wrong!\r\n");
break;
}
if(v==1||v==2)
break;
}
printf("\r\nArr={");
for(i=0;i<r;i++)
{
if (i!=r-1)
printf("%i,",*(pArr+i));
else
printf("%i",*(pArr+i));
}
printf("}\r\n");
for(i=0;i<r-1;i++)
for(int j=0;j<r-1;j++)
if(*(pArr+j)<*(pArr+j+1));
{
vrem=*(pArr+j);
*(pArr+j)=*(pArr+j+1);
*(pArr+j+1)=vrem;
}
printf("\r\n Sorted Arr={");
for(i=0;i<r;i++)
{
if(i!=r-1)
printf("%i,",*(pArr+i));
else
printf("%i",*(pArr+i));
}
printf("}\r\n");
delete[]pArr;
}
Лен4икс вне форума Ответить с цитированием
Старый 27.11.2012, 14:35   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
for(i=0;i<r-1;i++)
{
 bool ch = false;
 for(int j=0;j<r-1;j++)
 if(*(pArr+j)<*(pArr+j+1));
 {
  vrem=*(pArr+j);
 *(pArr+j)=*(pArr+j+1);
 *(pArr+j+1)=vrem;
  ch = true;
 }
 if(!ch) break;
}
Ещё одна оптимизация пузырка называется шейкер сортировкой, но оптимизировать пузырек практически бесполезно, все равно медленно работает.
Помог? Оставляем отзыв =)

Последний раз редактировалось Helloween; 27.11.2012 в 14:39.
Helloween вне форума Ответить с цитированием
Старый 27.11.2012, 19:57   #3
Лен4икс
 
Регистрация: 27.11.2012
Сообщений: 7
По умолчанию

Спасибо большое)
Лен4икс вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка пузырьком Катрин72 Помощь студентам 1 08.06.2012 12:55
сортировка пузырьком XAPOH Общие вопросы C/C++ 0 20.05.2012 22:57
сортировка пузырьком onezze Паскаль, Turbo Pascal, PascalABC.NET 0 09.04.2012 16:18
Сортировка пузырьком Авторитет Общие вопросы .NET 4 15.11.2010 19:50