
Новичок
Профиль
Группа: Участник
Сообщений: 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
|