Cześć :) Mam problem z programem sortującym - w wierszu 132 pojawia się komunikat "swap was not declared in this scope". Ktoś może ma jakiś pomysł, dlaczego to nie działa?
#pragma warning(disable : 144)
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
void funkcja(int tablica[], int a)
{
int i;
for (i = 0; i < a; i++)
{
tablica[i] = (rand() % 201) - 100;
}
}
void inverted(int tablica[], int a)
{
int i, temporary;
for (int i = 0; i < a / 2; i++) {
temporary = tablica[a - i - 1];
tablica[a - i - 1] = tablica[i];
tablica[i] = temporary;
}
}
void bubblesort(int tablica[], int b)
{
int x;
for (int i = 0; i < b; i++)
{
for (int j = b - 1; j > i; j--)
if (tablica[j] < tablica[j - 1])
{
x = tablica[j - 1];
tablica[j - 1] = tablica[j];
tablica[j] = x;
}
}
}
void insertion(int tablica[], int b)
{
int j, x;
for (int i = 1; i < b; i++)
{
j = i; x = tablica[j];
while (tablica[j - 1] > x && j > 0)
{
tablica[j] = tablica[j - 1];
j--;
}
tablica[j] = x;
}
}
void selection(int tablica[], int b)
{
int k, x;
for (int i = 0; i < b - 1; i++)
{
k = i; x = tablica[i];
for (int j = i + 1; j < b; j++)
if (tablica[j] < x)
{
k = j; x = tablica[j];
}
if (k != i) { tablica[k] = tablica[i]; tablica[i] = x; }
}
}
void quick(int tablica[], int c, int k)
{
int i, j, x, wybrany;
i = c; j = k;
wybrany = tablica[rand() % (c - k) + c];
while (i < j)
{
while (tablica[i] < wybrany) i++;
while (tablica[j] > wybrany) j--;
if (i <= j)
{
x = tablica[i]; tablica[i] = tablica[j]; tablica[j] = x;
i++; j--;
}
}
if (i < k) { quick(tablica, i, k); }
if (c < j) { quick(tablica, c, j); }
}
void shell(int tablica[], int b)
{
int i, j, y, z;
for (z = 1; z < b; z = 3 * z + 1);
z = z/9;
if (!z) z++;
while (z)
{
for (j = b - z - 1; j >= 0; j--)
{
y = tablica[j];
i = j + z;
while ((i < b) && (y > tablica[i]))
{
tablica[i - z] = tablica[i];
i = i+z;
}
tablica[i - z] = y;
}
z = z/3;
}
}
void heapify(int *tab, int n, int i)
{
int maxymalny = i;
int swap;
int lewy = 2 * i + 1;
int prawy = 2 * i + 2;
if (lewy < n && tab[lewy] > tab[maxymalny])
maxymalny = lewy;
if (prawy < n && tab[prawy] > tab[maxymalny])
maxymalny = prawy;
if (maxymalny != i)
{
*swap(&tab[i], &tab[maxymalny]);
heapify(tab, n, maxymalny);
}
}
void heapsort(int *tab, int n) {
for (int i = n / 2 - 1; i >= 0; i--)
heapify(tab, n, i);
for (int i = n - 1; i >= 0; i--)
{
*swap(&tab[0], &tab[i]);
heapify(tab, i, 0);
}
}
int main()
{
int i, j, elementy;
int array[100000];
clock_t start, end;
time_t ts, tk;
float diff;
srand(time(NULL));
printf("Liczba elementow do posortowania: \n");
scanf("%d", &elementy);
for (j = 1; j < 7; j++)
{
funkcja(array, elementy);
if (j == 1)
{
time(&ts); start = clock();
bubblesort(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
// printf("\n %f \n", start);
printf("\nczas wykonania bubblesort w kolejnosci losowej: %f sec\n", diff / 100);
time(&ts); start = clock();
bubblesort(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania bubblesort w kolejnosci uporzadkowanej: %f sec\n", diff / 100);
inverted(array, elementy);
time(&ts); start = clock();
bubblesort(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania bubblesort w kolejnosci odwrotnej: %f sec\n", diff / 100);
printf(" \n \n");
}
if (j == 2)
{
time(&ts); start = clock();
insertion(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania insertionsort w kolejnosci losowej: %f sec\n", diff / 100);
time(&ts); start = clock();
insertion(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania insertion w kolejnosci uporzadkowanej: %f sec\n", diff / 100);
inverted(array, elementy);
time(&ts); start = clock();
insertion(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania insertionsort w kolejnosci odwrotnej: %f sec\n", diff / 100);
printf(" \n \n");
}
if (j == 3)
{
time(&ts); start = clock();
selection(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania selectionsort w kolejnosci losowej:: %f sec\n", diff / 100);
time(&ts); start = clock();
selection(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania selectionsort w kolejnosci uporzadkowanej: %f sec\n", diff / 100);
inverted(array, elementy);
time(&ts); start = clock();
selection(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania selectionsort w kolejnosci odwrotnej: %f sec\n", diff / 100);
printf(" \n \n");
}
if (j == 4)
{
time(&ts); start = clock();
heapsort(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania heapsort w kolejnosci losowej: %f sec\n", diff / 100);
time(&ts); start = clock();
heapsort(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania heapsort w kolejnosci uporzadkowanej:: %f sec\n", diff / 100);
inverted(array, elementy);
time(&ts); start = clock();
heapsort(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania heapsort w kolejnosci odwrotnej: %f sec\n", diff / 100);
printf(" \n \n");
}
if (j == 5)
{
time(&ts); start = clock();
quick(array, 0, elementy - 1);;
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania quicksort w kolejnosci losowej:: %f sec\n", diff / 100);
time(&ts); start = clock();
quick(array, 0, elementy - 1);;
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania quicksort w kolejnosci uporzadkowanej:: %f sec\n", diff / 100);
inverted(array, elementy);
time(&ts); start = clock();
quick(array, 0, elementy - 1);;
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania quicksort w kolejnosci odwrotnej: %f sec\n", diff / 100);
printf(" \n \n");
}
if (j == 6)
{
time(&ts); start = clock();
shell(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania shellsort w kolejnosci losowej: %f sec\n", diff / 100);
time(&ts); start = clock();
shell(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania shellsort w kolejnosci uporzadkowanej:: %f sec\n", diff / 100);
inverted(array, elementy);
time(&ts); start = clock();
shell(array, elementy);
time(&tk); end = clock();
diff = difftime(end, start);
printf("\nczas wykonania shellsort w kolejnosci odwrotnej: %f sec\n", diff / 100);
printf(" \n \n");
}
}
system("pause");
}