Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение времени работы сортировок, Правильно ли прога делает? 
:(
    Опции темы
Lazarus Long
  Дата 20.2.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Вот тут написал прогу для сравнения времени работы сортировок... Поскажите правильно ли она  работает, тоесть правильное ли время выдает?
Прога:
Код

#include <time.h>
#include <locale.h>
#include <sstream.h>
#include <windows.h>
#include <ctype.h>
#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <string.h>
#include <cstdlib.h>
#define Size 2000

//----------------------//
//изменение кодировки из DOS в Windows
char* Decode_DOS_to_Win(char * str)
{
   unsigned char *cstr=str;//"unsigned" - чтоб избежать предупреждений
// "сдвигаем" код символов
   for(; *cstr; cstr++)
   {
       if(*cstr>=128 && *cstr<=175)
           *cstr+=64;
       else if(*cstr>=224 && *cstr<=239)
           *cstr+=16;
       else if(*cstr==252)
           *cstr=185;
   }
   return str;
}


//делаем буквы маленькими
int Big_to_little(int word)
{
//русские буквы
for (int i=(-128);i<(-112);i++)
   {
      if (word==i)
      {word=i+32;}
   }
for (int i=(-112);i<(-96);i++)
   {
      if (word==i)
      {word=i+80;}
   }
      if (word==-16)
      {word=-15;}
//английские буквы
for (int i=65;i<90;i++)
   {
      if (word==i)
      {word=i+32;}
   }
return word;
}

//сотрировка простыми вставками
long Vstavki(string mass[], string mass0[], int mass2[], int n)
{
double TIME1,TIME2,TIME3;
TIME1=clock();//начинаем отсчет времени
for (int i = 1; i < n; i++)
{
      int j=i;
      mass0[Size]=mass0[i];
      mass[Size]=mass[i];
      mass2[Size]=mass2[i];

      while ( (j > 0) && (mass0[n] < mass0[j-1]) )
         {
         mass0[j]=mass0[j-1];
         mass[j]=mass[j-1];
         mass2[j]=mass2[j-1];
         j--;
         }
      mass0[j]=mass0[Size];
      mass[j]=mass[Size];
      mass2[j]=mass2[Size];
}//конец сортировки
TIME2=clock();
TIME3=TIME2-TIME1;//время сортировки
return TIME3;
}//конец


//обменная сотрировка (пузырьком)
long Puzirek(string mass[], string mass0[], int mass2[], int n)
{
double TIME1,TIME2,TIME3;
TIME1=clock();//начинаем отсчет времени
for (int k = n-1; k > 0; k--)
{
   for (int i = 1; i < k; i++)
   {
      if ( mass0[i] > mass0[i+1] )
      {
         mass[Size] = mass[i+1];
         mass2[Size]= mass2[i+1];
         mass0[Size]= mass0[i+1];
           mass[i+1]  = mass[i];
           mass2[i+1] = mass2[i];
           mass0[i+1] = mass0[i];
         mass[i]   = mass[Size];
         mass2[i]  = mass2[Size];
         mass0[i]  = mass0[Size];
      }
   }
}//конец сортировки
TIME2=clock();
TIME3=TIME2-TIME1;//время сортировки
return TIME3;
}


//сотрировка выбором
long Vibor(string mass[], string mass0[], int mass2[], int n)
{
double TIME1,TIME2,TIME3;
TIME1=clock();//начинаем отсчет времени
for (int s = 0; s < n-1; s++)
{
   mass0[Size]=mass0[s];
   mass[Size]=mass[s];
   mass2[Size]=mass2[s];
   int Min=s;
   for (int i = s+1; i < n; i++)
   {
      if ( mass0[i] < mass0[Size] )
      {
         mass0[n]=mass0[i];
         mass[n]=mass[i];
         mass2[n]=mass2[i];
         Min=i;
            mass0[Min]=mass0[s];
            mass[Min]=mass[s];
            mass2[Min]=mass2[s];
         mass0[s]=mass0[Size];
         mass[s]=mass[Size];
         mass2[s]=mass2[Size];
      }
   }
}
TIME2=clock();
TIME3=TIME2-TIME1;//время сортировки
return TIME3;
}


//ГЛАВНАЯЯ ПРОГРАММА
int main()
{

//читаем и создаем файлы
   ifstream TEXTtxt( "18.txt",ios::in );


//если нет файла, то СТОП
   if ( !TEXTtxt )
      {cout << left << setw (10) << "\nERROR!!!" << "FILE COULD NOT BE OPENED!!!\n" << endl;}


//резервируем переменные
   //массивы для всяких нужд
   string mass0[Size];  //массив для измененных слов
   string mass [Size]; //массив для неизмененных слов
   int    mass2[Size];//массив для номеров (пп) слов
   //переменные для всяких нужд
   int n=1;        //номер слова в файле
   int m=0;        //номер слова в массиве
   int mN;         //переменная для номеров слов
   double time_Vstavki=0;
   double time_Puzirek=0;
   double time_Vibor  =0;
   char word[30];//макс длинна слова читаемого из файла
   int xLen;     //переменная длинны слова


   cout << "START....." << endl;
   cout << "READING WORDS FROM FILE.....\n" << endl;

//вывод номеров и слов в файл
while ( TEXTtxt >> Decode_DOS_to_Win(word) )
{
   //удаляем ненужные знаки
   xLen=strlen(word);//динна обрабатываемого слова
   if ( word[0]=='\"' ||  word[0]=='-')
      {
         word[0]=NULL;
      }
   for (int i = 0; i < xLen; i++)
   {
      if (word[i]=='\"' || word[i]==',' || word[i]=='.' ||
          word[i]=='!' || word[i]=='?' || word[i]==':')
      {
         word[i]=NULL;
      }
   }//удалили все ненужные знаки

//удаляем пустые ненужные слова
   if  (word[0]==NULL)
      {}//удалили
   //елси НЕ пустая, пишем в файл
   else
   {
   mass[m]=word;//неизмененные слова
   word[0]=Big_to_little(word[0]);
   mass0[m]=Decode_DOS_to_Win(word);//измененные слова
   mass2[m]=n;//номера слов
   n++;
   m++;
   }
}//закончили
//  (double)((fin - start)/CLOCKS_PER_SEC)
cout << "-----------------------------------------------------" << endl;
cout << left << "|" << setw(12) << " N elements" << "|" << setw(12)
        << "   Vstavki" << "|" << setw(12) << "   Puzirek" << "|" << setw(12)
        << "   Vibor" << "|" << endl;
cout << "-----------------------------------------------------" << endl;

   time_Vstavki = Vstavki(mass,mass0,mass2,500);
   time_Puzirek = Puzirek(mass,mass0,mass2,500);
   time_Vibor   = Vibor  (mass,mass0,mass2,500);

cout << left << "|" << setw(12) << " 500" << "| " << setw(8)
        << time_Vstavki << "ms | " << setw(8) << time_Puzirek << "ms | "
         << setw(8) << time_Vibor << "ms |" << endl;
cout << "-----------------------------------------------------" << endl;

   time_Vstavki = Vstavki(mass,mass0,mass2,1000);
   time_Puzirek = Puzirek(mass,mass0,mass2,1000);
   time_Vibor   = Vibor  (mass,mass0,mass2,1000);

cout << left << "|" << setw(12) << " 1000" << "| " << setw(8)
        << time_Vstavki << "ms | " << setw(8) << time_Puzirek << "ms | "
         << setw(8) << time_Vibor << "ms |" << endl;
cout << "-----------------------------------------------------" << endl;

   time_Vstavki = Vstavki(mass,mass0,mass2,1500);
   time_Puzirek = Puzirek(mass,mass0,mass2,1500);
   time_Vibor   = Vibor  (mass,mass0,mass2,1500);

cout << left << "|" << setw(12) << " 1500" << "| " << setw(8)
        << time_Vstavki << "ms | " << setw(8) << time_Puzirek << "ms | "
         << setw(8) << time_Vibor << "ms |" << endl;
cout << "-----------------------------------------------------" << endl;






   cout << "\nTHATS ALL FOLKS!!!" << endl;


   getch();
   return 0;
}



Заранее благодарю, Lazarus Long......

Это сообщение отредактировал(а) Lazarus Long - 20.2.2008, 17:30

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  18.txt 13,40 Kb
PM MAIL ICQ   Вверх
Lazarus Long
  Дата 20.2.2008, 20:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



АП, ответ нужен срочно!!!
PM MAIL ICQ   Вверх
JackYF
Дата 20.2.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(Lazarus Long @  20.2.2008,  16:30 Найти цитируемый пост)
Поскажите правильно ли она  работает

Посмотрел исходник. Логика верная, вроде бы (качество кода обсуждать не буду).


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.