Witam. Do napisania mam program sortujący. Najpierw tworzy tablice o podanym rozmiarze, następnie wypełnia ją tab[0]=0, tab[1]=1, miesza ją i sortuje. Sortowanie takiej tablicy ma się wykonać 5 razy, żeby policzyć średnią arytmetyczną pojedynczego sortowania. Potem rozmiar zwiększa się i tablica znowu jest wypełniana itd..
Sortowanie ma wyszukiwać minimalną i maksymalną wartość z tablicy, wstawiać je jako pierwszy(min), i ostatni element(max), a następnie "ucinać" tą tablice na końcu i początku i rekurencyjnie powtarzać to dla zmniejszonej tablicy.
p jest to minimalny indeks, k jest to maksymalny indeks tablicy. Niestety nie mogę znaleźć błędu.. Tutaj kod:
#include<iostream>
#include<cstdio>
#include<time.h>
#include<ctime>
#include<algorithm>
#include<fstream>
FILE *plik;
void sortowanieminmax_(int *tab, int rozmiar, int p, int k)
{
int max, min, j, pom;
for (int i = 0; i < rozmiar; i++)
{
std::cout << tab[i] << "\n";
}
system("pause");
if (k - p >= 0)
{
max = p;
min = p;
for (j = p; j < k + 1; j++)
{
if (tab[j] < tab[min])
{
min = j;
}
if (tab[j]>tab[max])
{
max = j;
}
}
pom = tab[p];
tab[p] = tab[min];
tab[min] = pom;
pom = tab[k];
tab[k] = tab[max];
tab[max] = pom;
p = p + 1;
k = k - 1;
sortowanieminmax_(tab, rozmiar, p, k);
}
}
void sortowanieminmax(int* tab, int rozmiar, double TabPom[])
{
int w, i, sprawdzanie, z;
clock_t start, koniec;
double srednia;
printf("Sortowanie min-max:\n");
fprintf(plik, "Sortowanie min-max:\n");
for (w = 0; w < 8; w++) // tworzenie tablic
{
rozmiar = rozmiar + rozmiar;
tab = (int*)malloc(sizeof(int)*rozmiar);
for (i = 0; i < rozmiar; i++) // wypelnianie tablicy tab[1]=1 itd...
{
tab[i] = i;
}
for (z = 0; z < 5; z++) // petla do mieszania i sortowania 5 razy zeby policzyc srednia arytmetyczna
{
std::random_shuffle(tab, tab + rozmiar);
start = clock(); // zaczyna mierzyc czas
/// sortowanie MIN_MAX
sortowanieminmax_(tab, rozmiar, 0, rozmiar - 1);
/// sortowanie MIN_MAX
koniec = clock(); //konczy mierzyc czas
TabPom[z] = koniec - start;
for (sprawdzanie = 0; sprawdzanie < rozmiar - 1; sprawdzanie++)
{
if (tab[sprawdzanie] > tab[sprawdzanie + 1])
{
printf("Zle\n");
break;
}
}
}
srednia = (TabPom[0] + TabPom[1] + TabPom[2] + TabPom[3] + TabPom[4]) / 5;
printf("Dla tablicy %d elementowej zajelo to srednio %f sekund.\n", rozmiar, ((float)srednia) / CLOCKS_PER_SEC); // srednia arytm. 5 sortowan dla 1 tablicy
fprintf(plik, "Dla tablicy %d elementowej zajelo to srednio %f sekund.\n", rozmiar, ((float)srednia) / CLOCKS_PER_SEC);
free(tab);
}
}
int main()
{
plik = fopen("wyniki.txt", "a");
int rozmiar = 5;
double TabPom[5];
int *tab = NULL;
sortowanieminmax(tab, rozmiar, TabPom);
fclose(plik);
return 0;
}