Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
struct znaki {
int lcalk;
};
Ostatnio zmieniony przez Tibiarz : 20-10-2015, 20:57
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct znaki {
int lcalk;
};
// FUNKCJE \\
void quickSort(znaki * tab, int left, int right) {
int i = left, j = right;
znaki tmp;
int pivot;
pivot = tab[(left + right) / 2].lcalk;
/* partition */
while (i <= j) {
while (tab[i].lcalk < pivot)
i++;
while (tab[j].lcalk > pivot)
j--;
if (i <= j) {
tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(tab, left, j);
if (i < right)
quickSort(tab, i, right);
}
//MAIN
int main() {
int n = 5, i;
char x = 'h';//szukany znak
znaki tab[5];
//przed sortowaniem
for (i = 0; i<n; i++)
printf("Liczba numer %d, ma wartosc %d\n", i, tab[i].lcalk);
quickSort(tab, 0,n-1);
printf("\n");
//po sortowaniu
for (i = 0; i<n; i++)
printf("Liczba numer %d, ma wartosc %d\n", i, tab[i].lcalk);
system("PAUSE");
return EXIT_SUCCESS;
}
Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
Ostatnio zmieniony przez Endryu : 20-10-2015, 23:15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
//Struktura:
struct znaki {
int lcalk;
char znak;
double lzmienno;
};
// FUNKCJE \\
struct znaki ** losowanie(int n) {
int i;
struct znaki (**tab) = (struct znaki**)malloc ( sizeof(struct znaki) *n);//wskaźnik na wskaźnik tablicy struktur
for (i=0;i<n;i++) { //przypisanie struktury do tablicy wskaźników
tab[i] = (struct znaki*)malloc( sizeof(struct znaki));
}
srand((unsigned)time(0));//pseaudolosowość liczb uzależniona od czasu rzeczywistego
for ( i=0 ; i<n ; i++) {
tab[i]->lcalk = rand() % 10000001; // liczba z <0:10^6>
tab[i]->znak = rand() % (26) + 97; //małe litery przedział z kodu ASCII <97;122>
// tab[i]->znak = 97 + rand() % 26;
tab[i]->lzmienno = 8;
}
return tab ; //zwraca adres tablicy
}
void kasowanie(struct znaki** tab, int n) {
int i;
for ( i=0 ; i<n ; i++) {
free(tab[i]);
}
free(tab);
}
void quickSort(struct znaki ** tab, int left, int right) {
int i = left, j = right;
znaki *tmp;
int pivot;
pivot = (*tab[(left + right) / 2]).lcalk;
/* partition */
while (i <= j) {
while ((*tab[i]).lcalk < pivot)
i++;
while ((*tab[j]).lcalk > pivot)
j--;
if (i <= j) {
tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(tab, left, j);
if (i < right)
quickSort(tab, i, right);
}
int zlicz_znaki(struct znaki** tab, int n, char x) {
int i,licznik=0;
for ( i=0 ; i<n-1;i++) {
if (tab[i]->znak == x)
licznik++;
}
return licznik;
}
//MAIN
int main() {
//Zegar start:
clock_t begin,end;
double time_spent;
begin = clock();
int n=300000,i;
int licznik;//liczba struktur, liczna wystąpień znaku
char x='h';//szukany znak
//Wywołanie funkcji:
struct znaki** tab = losowanie(n);
//przed sortowaniem
for (i=0;i<n;i++)
printf("Liczba numer %d, ma wartosc %d\n",i,tab[i]->lcalk);
quickSort(tab, 0,n-1);
printf("\n");
//po sortowaniu
for (i=0;i<n;i++)
printf("Liczba numer %d, ma wartosc %d\n",i,tab[i]->lcalk);
licznik = zlicz_znaki(tab, n, x);
kasowanie(tab,n);
//Zegar stop:
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("Liczba wystapien znaku: %d\n",licznik);
printf("Czas wykonania skryptu: %f\n",time_spent);
system("PAUSE");
return EXIT_SUCCESS;
}
Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
Ostatnio zmieniony przez Pumpkin : 22-10-2015, 22:32
Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)
Zakładki