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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2012, 19:26   #1
mugik770
 
Регистрация: 12.07.2012
Сообщений: 7
По умолчанию сделать коментарии и проверьте код к задаче ргр по теории информатики

Задача: Написать алгоритм который сортирует массив следующим образом: если его длина меньше n то использовать метод пузырьковой сортировки а иначе-метод Хоара. Экспериментальным путём определить оптимальное значение n для типов date int и строк 16
ПРошу сделать коменты желательно поподробнее ну проверить правильность кода. Заранее благодарен тем кто поможет!
Код:
#include<iostream>
#include <ctime>
using namespace std;
struct date{ 
	int year;
	int month;
	int day;
};
struct str16{ 
	char str [16];
};
int cmp(int arg1, int arg2){
	if(arg1>arg2)
		return 1;
	else if(arg1<arg2)
		return -1;
	else
		return 0;
}
int cmp(date arg1, date arg2){
	if(arg1.year>arg2.year)
		return 1;
	else if (arg1.year<arg2.year)
		return -1;
	else
		if(arg1.month>arg2.month)
			return 1;
		else if(arg1.month<arg2.month)
			return -1;
		else
			if(arg1.day>arg2.day)
				return 1;
			else if(arg1.day<arg2.day)
				return -1;
			else
				return 0;
}
int cmp(str16 arg1, str16 arg2){
	for(int i=0; i<16; i++){
		if(arg1.str[i]>arg2.str[i])
			return 1;
		if(arg1.str[i]<arg2.str[i])
			return -1;
	}
	return 0;
}
template <class T>
void bubble(T*a, int n){
for (int i=n-1;i>0;i--){
    for (int j=0;j<i;j++){
        if(cmp(a[j],a[j+1])==1){
            T tmp=a[j];
            a[j]=a[j+1];
            a[j+1]=tmp;
          }
     }
  }
}
template <class T>
void qSort(T *A, int low, int high) {
      int i = low;
      int j = high;
      T x = A[(low+high)/2];
      do {
          while(cmp(A[i],x)==-1) ++i;
          while(cmp(A[j] , x)==1) --j;
          if(i <= j){
              T temp = A[i];
              A[i] = A[j];
              A[j] = temp;
              i++; j--;
          }
      } while(i <= j);
 
      if(low < j) qSort(A, low, j);
      if(i < high) qSort(A, i, high);
  }
void randArr(int *mass, int count){
	for(int i=0;i<count;i++){
		mass[i]=rand();
	}
}
void randArr(str16 *mass, int count){
	for(int i =0; i<count; i++)
		for(int j=0; j<16; j++)
			mass[i].str[j]=rand()%255;
}
void randArr(date *mass, int count){
	for(int i=0; i<count;i++){
		mass[i].year=rand()%10000;
		mass[i].month=rand()%12;
		mass[i].day=rand()%31;
	}
}
template <class T>
int optimal(){
	int result=0;
	int iter=400;
	for(int i=0; i<iter; i++){
		float bTime=0, qTime=0;
		int n=2;
		for(;qTime>=bTime;n++){
			T *mass=new T [n];
			randArr(mass,n);
			clock_t t0 = clock();
			bubble(mass,n);
			clock_t t1 = clock();
			bTime=(float)t1-t0;
			clock_t t2=clock();
			qSort(mass,0,n-1);
			clock_t t3=clock();
			qTime=(float)t3-t2;
		}
		result+=n;
	}
	return result/iter;
}
template <class T>
void mySort(T *mass, int count){
	int o=optimal<T>();
	if(count<o){
		bubble<T>(mass,count);
		cout<<"Bubble sort	:"<<endl;
	}
	else{
		qSort<T>(mass,0, count-1);
		cout<<"Quick sort	:"<<endl;
	}
}
int main(){
	cout<<"For int		:"<<optimal<int>()<<endl;
	cout<<"For date	:"<<optimal<date>()<<endl;
	cout<<"For str16	:"<<optimal<str16>()<<endl;
	int count=55;
	int *mass=new int [count];
	randArr(mass,count);
	cout<<"Test sequence	:"<<endl;
	for(int i=0;i<count;i++)
		cout<<mass[i]<<" ";
	cout<<endl;
	mySort<int>(mass, count);
	for(int i=0;i<count;i++)
		cout<<mass[i]<<" ";
	cout<<endl;
	return 0;
}

Последний раз редактировалось Stilet; 01.09.2012 в 20:04.
mugik770 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача про званный ужин и не только. Проверьте пои решения по теории вероятностей Slavytich Помощь студентам 2 07.04.2012 20:32
Отсортировать файл. Нужно сделать сегодня. РГР nicklifs Паскаль, Turbo Pascal, PascalABC.NET 5 15.12.2011 01:46
Нужен код к задаче dadalesha Помощь студентам 3 30.11.2010 09:32
Нужны коментарии к задаче seme4ki Помощь студентам 1 23.12.2008 18:30