IPB
ЛогинПароль:

> Алгоритмы пузырьковой сортировки
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


Итак, все знают что есть такой вид сортировки, как пузырьковая. Меня интересует какие еще есть алгоритмы в этом виде сортировки кроме: последовательного и чет-нечетной перестановки? И если есть информация о них поделиться ей, если не жалко.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


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

Вот прога целиком

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <ctime>

using namespace std;
void RandomDataInitialization(double *&pData, int& DataSize) ;
void ProcessInitialization(double *&pData, int& DataSize) ;
void ProcessTermination(double *pData);
void DummyDataInitialization(double*& pData, int& DataSize);
void Shaker(double *pData, int DataSize);
void combsort( double *pData, int DataSize );
void PrintData(double *pData, int DataSize);
const double RandomDataMultiplier = 1000.0;

int main(int argc, char *argv[]) {
double *pData = 0;
int DataSize = 0;

time_t start, finish;
double duration = 0.0;

printf("Serial bubble sort program\n");

// Process initialization // В этой функции можно менять вид заполнения массива
ProcessInitialization(pData, DataSize);

//printf("Data before sorting\n");
//PrintData(pData, DataSize); // Для проверки исходных данных

// Serial bubble sort // Виды сортировки, обычная пузырьковая, расческой, Шейкера активация на выбор
start = clock();
SerialBubble(pData, DataSize);
//combsort(pData, DataSize);
//Shaker(pData, DataSize);
finish = clock();

//printf("Data after sorting\n");
//PrintData(pData, DataSize); //Для проверки результата

duration = (finish - start) / double(CLOCKS_PER_SEC);
printf("Time of execution: %f\n", duration);

// Process termination
ProcessTermination(pData);

return 0;
}

// Function for allocating the memory and setting the initial values
void ProcessInitialization(double *&pData, int& DataSize) {
do {
printf("Enter the size of data to be sorted: ");
scanf("%d", &DataSize);
if(DataSize <= 0)
printf("Data size should be greater than zero\n");
}
while(DataSize <= 0);

printf("Sorting %d data items\n", DataSize);

pData = new double[DataSize];

// Simple setting the data
//DummyDataInitialization(pData, DataSize);

// Setting the data by the random generator
RandomDataInitialization(pData, DataSize);
}

// Function for computational process termination
void ProcessTermination(double *pData) {
delete []pData;
}

// Function for simple setting the initial data
void DummyDataInitialization(double*& pData, int& DataSize) {
for(int i = 0; i < DataSize; i++)
pData[i] = DataSize - i;
}

// Function for initializing the data by the random generator
void RandomDataInitialization(double *&pData, int& DataSize) {
srand( (unsigned)time(0) );

for(int i = 0; i < DataSize; i++)
pData[i] = double(rand()) / RAND_MAX * RandomDataMultiplier;
}

// Serial bubble sort algorithm
void SerialBubble(double *pData, int DataSize) {
double Tmp;

for(int i = 1; i < DataSize; i++)
for(int j = 0; j < DataSize - i; j++)
if(pData[j] > pData[j + 1]) {
Tmp = pData[j];
pData[j] = pData[j + 1];
pData[j + 1] = Tmp;
}
}

void PrintData(double *pData, int DataSize) {
for(int i = 0; i < DataSize; i++)
printf("%7.4f ", pData[i]);
printf("\n");
}

void Shaker(double *pData, int DataSize){
double t;
bool exchange;

do {
exchange = false;
for(int i=DataSize-1; i > 0; --i) {
if(pData[i-1] > pData[i]) {
t = pData[i-1];
pData[i-1] = pData[i];
pData[i] = t;
exchange = true;
}
}
for(int i=1; i < DataSize; ++i) {
if(pData[i-1] > pData[i]) {
t = pData[i-1];
pData[i-1] = pData[i];
pData[i] = t;
exchange = true;
}
}
} while(exchange);

}

void combsort(double *pData, int DataSize) {
float shrink_factor = 1.247330950103979;
int gap = DataSize, swapped = 1, i; double swap;

while ((gap > 1) || swapped) {
if (gap > 1)
gap = gap / shrink_factor;

swapped = 0;
i = 0;

while ((gap + i) < DataSize) {
if (pData[i] - pData[i + gap] > 0) {
swap = pData[i];
pData[i] = pData[i + gap];
pData[i + gap] = swap;
swapped = 1;
}
++i;
}
}
}



еще надо будет добавить чет-нечет
Дальше дело за малым, прогон на проверку каждого алгоритма.

Сообщение отредактировано: Account -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Account   Алгоритмы пузырьковой сортировки   23.06.2011 21:39
IUnknown   Odd-Even Sort (так называемая "параллельная п…   24.06.2011 0:04
Account   Первая, действительно чет-нечет, а вот вторую не в…   24.06.2011 1:18
Account   Сортировка расческой (вроде как тоже усовершенство…   24.06.2011 1:55
IUnknown   Ты б лучше обе реализации привел, чтоб сравнить мо…   24.06.2011 2:18
Account   IUnknown, велосипед не придумывал выдернул код пр…   24.06.2011 2:48
IUnknown   Это надо сказать спасибо переводчикам Википедии. В…   24.06.2011 3:09
Account   Это надо сказать спасибо переводчикам Википедии. …   24.06.2011 3:27
Account   Добавил чет-нечет и проводил эксперимент на сортир…   24.06.2011 3:51
Account   Никак до конца не пойму применения чет-нечет алгор…   26.06.2011 19:36
IUnknown   Вот по этому разобраться сможешь?   26.06.2011 22:05
Account   Основа понятна вот этот участок не очень особенно …   27.06.2011 2:13
IUnknown   if (keepsmall) { /* Keep the nlocal smaller e…   27.06.2011 17:38
Account   [code=cpp] if (keepsmall) { /* Keep the nloca…   28.06.2011 0:50
IUnknown   С использованием MPI проверить нет возможности, а …   28.06.2011 15:13
TarasBer   В Сях можно явно передавать то, что Ада передаёт н…   28.06.2011 15:38
IUnknown   16-ть процессоров, 8 ядер на каждом... 128, получа…   28.06.2011 15:54
TarasBer   Я так понял, тут фишка в том, что velmnts и vrelmn…   28.06.2011 17:33
IUnknown   Я ничего не хочу сказать, я констатирую факт: если…   28.06.2011 18:28
Account   Вот что меня еще смущает , погонял сортировку алго…   28.06.2011 19:05
TarasBer   То есть у тебя получился ЛИНЕЙНЫЙ рост времени? За…   28.06.2011 19:58
Account   То есть у тебя получился ЛИНЕЙНЫЙ рост времени? З…   29.06.2011 0:31
IUnknown   Это реально. В одном из описаний алгоритма встреча…   29.06.2011 1:13
Account   Так что не сомневайся, это действительно очень б…   29.06.2011 1:30
Account   IUnknown, случаем не знаешь иностранных ресурсов(в…   29.06.2011 21:41
IUnknown   У меня где-то был даже PDF, в котором сведены граф…   29.06.2011 21:55
Account   IUnknown, заранее благодарю. Еще вопрос такой. Ран…   29.06.2011 23:57
IUnknown   Неправильно понимаешь. Это не код основного прилож…   30.06.2011 1:06
Account   А количесвто пересылок, выражается трудоемкостью …   30.06.2011 2:15
IUnknown   Каждый процесс посылает свою часть данных всем ост…   30.06.2011 2:45
Account   IUnknown, огромное тебе спасибо за все. Очень помо…   30.06.2011 3:14
Account   Кстати, а вот с какого процесса начинается объедин…   30.06.2011 3:36
IUnknown   Во-первых, я чуть-чуть поправил свой предыдущий по…   30.06.2011 6:11
Account   Еще раз спасибо, разжевал и в рот положил можно ск…   30.06.2011 6:28


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 10:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name