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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 10:29   #1
looc-dogg
Пользователь
 
Регистрация: 06.01.2014
Сообщений: 20
По умолчанию Сравнение 3-х алгоритмов сортировки на "СИ"

Ребят, гляньте код, все фурычит, ток не пойму как сделать так чтобы в консоль выводило 3 параметра сравнения для каждой сортировки:
1.Время выполнения(у меня почему-то все по нулям выводит).
2. количество присваиваний .
3 количество сравнений

буду очень благодарен!!!

Код:
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
 #define N 100 
int a[N];
void BubbleSort(int *x, const int n)
{
    int i,j,m;
    for (i=0;i<n;i++) 
       for (j=n-1;j>i;j--) 
       { 
    	 if (x[j-1]>x[j]) 
	     { 
	       m=x[j-1]; 
	       x[j-1]=x[j]; 
	       x[j]=m;  
	     } 
       }
}
void SheikerSort(int *a, const int n) 
 { 
            int l, r, i, k, buf; 
            k = l = 0; 
            r = n - 2; 
            while(l <= r) 
            { 
               for(i = l; i <= r; i++) 
                  if (a[i] > a[i+1]) 
                  { 
                     buf = a[i]; a[i] = a[i+1]; a[i+1] = buf; 
                     k = i; 
                  } 
               r = k - 1; 
               for(i = r; i >= l; i--) 
                  if (a[i] > a[i+1]) 
                  { 
                     buf = a[i]; 
			         a[i] = a[i+1]; 
			         a[i+1] = buf; 
                     k = i; 
                  } 
               l = k + 1; 
            } 
 }
 void qsort(int l, int r)
 {
	int w,x,i,j;
	i=l;
	j=r;
	x=a[(l+r)/2];
	while (i<=j)
	{
		while (a[i]<x) i++;
		while (x<a[j]) j--;
		if (i<=j)
			{
				w=a[i]; a[i]=a[j]; a[j]=w;
					i++; j--;
			}
	}
	if (l<j) qsort(l,j);
	if (i<r) qsort(i,r);
 
}
int main() 
 {
 	 
 	clock_t start, end;
   start = clock();
   int i;
  FILE *fo, *fb,*fq,*fs;
fo=fopen("input.txt","r");
fq=fopen("outputq.txt","w");
fb=fopen("outputb.txt","w");
fs=fopen("outputs.txt","w");   
    
    for(i = 0 ; i < N; i++) 
	{ 
        fscanf(fo,"%d", &a[i]);
    }
    qsort(0,N-1);
    for (i = 0; i < N; i++)
        fprintf(fq,"%d ", a[i]);
        
         for(i = 0 ; i < N; i++) 
		 { 
       		 fscanf(fo,"%d", &a[i]);
  		 }
    SheikerSort(a, N); 
    for (i = 0; i < N; i++)
        fprintf(fs,"%d ", a[i]);
		
		 for(i = 0 ; i < N; i++) 
	{ 
        fscanf(fo,"%d", &a[i]);
    }
		BubbleSort(a,N);
		 for (i = 0; i < N; i++)
        fprintf(fb,"%d ", a[i]);
	    

        
       fclose(fo);
    fclose(fs);
    fclose(fb);
    fclose(fq);
    end = clock();
    printf("The time was: %f\n", (end - start) / CLK_TCK);
    return 0;
    
 }

Последний раз редактировалось Stilet; 26.02.2014 в 10:40.
looc-dogg вне форума Ответить с цитированием
Старый 26.02.2014, 10:54   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Таймер не правильно сделан. Поробуйте вот так:
Код:
// Инициализация таймера замера времени выполнения алгоритма
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
LARGE_INTEGER time1;
QueryPerformanceCounter(&time1);
// Тут то, что меряем
// Снятие показаний таймера
LARGE_INTEGER time2;
QueryPerformanceCounter(&time2);
time2.QuadPart -= time1.QuadPart;
double span = (double) time2.QuadPart / freq.QuadPart;

span = span * pow(10,9);
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.02.2014, 11:38   #3
looc-dogg
Пользователь
 
Регистрация: 06.01.2014
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Таймер не правильно сделан. Поробуйте вот так:
Код:
// Инициализация таймера замера времени выполнения алгоритма
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
LARGE_INTEGER time1;
QueryPerformanceCounter(&time1);
// Тут то, что меряем
// Снятие показаний таймера
LARGE_INTEGER time2;
QueryPerformanceCounter(&time2);
time2.QuadPart -= time1.QuadPart;
double span = (double) time2.QuadPart / freq.QuadPart;

span = span * pow(10,9);
Спасиб,а куда это пихать?Не понял
looc-dogg вне форума Ответить с цитированием
Старый 26.02.2014, 13:46   #4
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

Цитата:
а куда это пихать?
это не твой код.Никто тебе не будет подсказывать что и куда пихать
alekopoko вне форума Ответить с цитированием
Старый 26.02.2014, 13:56   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Вот ты прикинь, что тебе нужно замерить время. Как бы ты сделал? Потом, как прикинешь, взгляни на кусок кода, который тебе дал Smitt&Wesson, посмотри на названия переменных, посмотри что за тип такой Large_integer, что делают процедуры (строго говоря в С++ вообще нет процедур) QueryPerformanceFrequency и QueryPerformanceCounter. И все станет ясно, как солнце в безоблачную погоду. Короче, включай мозг .
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Не работает сравнение "Фамилии" с "ФИО" Xakand_2009 БД в Delphi 4 11.07.2012 23:55
Сравнение алгоритмов сортировки массива Семен_Владимирович Общие вопросы C/C++ 2 15.02.2011 19:02
программа реализации алгоритма "Сравнение и подсчет" сортировки для АТД «Очередь» (с одной головой) bender_prog Фриланс 7 08.01.2011 01:17
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04