Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
| Autor | Správa |
|---|
Registrovaný: 05.04.11 Prihlásený: 12.06.11 Príspevky: 5 Témy: 1 | 1 |
Zdravim, som v C novačik a chcel som sa spýtať ako mam spraviť aby algoritmus ako je bublesort a podobne jemu vypisali po triedeni čisiel dobu triedenia, popr. i počet iterací všetkych implementovaných algoritmov.
vkladam aj zdrojak na buble
Kód: #include<stdio.h> #include<conio.h> void bubble(int a[],int n) { int i,j,t; for(i=n-2;i>=0;i--) { for(j=0;j<=i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } }//end for 1. }//end function. void main() { int a[100],n,i; clrscr(); printf("\n\n Enter integer value for total no.s of elements to be sorted: "); scanf("%d",&n); for( i=0;i<=n-1;i++) { printf("\n\n Enter integer value for element no.%d : ",i+1); scanf("%d",&a[i]); } bubble(a,n); printf("\n\n Finally sorted array is: "); for( i=0;i<=n-1;i++) printf("%3d",a[i]); }
|
|
Registrovaný: 20.03.11 Prihlásený: 01.11.11 Príspevky: 27 Témy: 0 | 0 | |
Registrovaný: 05.04.11 Prihlásený: 12.06.11 Príspevky: 5 Témy: 1 | 1 |
Ano presne, čas ako sa pole dlho triedilo  . A ta stranka nejde
|
|
Registrovaný: 19.09.09 Prihlásený: 12.09.13 Príspevky: 359 Témy: 55 | 55 Bydlisko: Rohožník |
pouzi kniznicu time.h, potom v mane zadeklaruj: clock_t begin, end; flot time;
potom uz staci pred zavolanim funkcie zadat begin=clock() a za funkciou sort napis end=clock();
time = (float)(end - begin) / CLOCKS_PER_SEC;
a vypises uz iba ten time a mas dobu od zacatia po koniec triedenia v sekundách - podla toho si uz uprav formatovanie vystupu, ci chces aj desatiny a stotiny sekundy, ale tipujem, ze treba pouzit este mensie jednotky, pretože aj budes použivať relativne male pole, tak ten cas je strasne krátky 
|
|
Registrovaný: 05.04.11 Prihlásený: 12.06.11 Príspevky: 5 Témy: 1 | 1 |
Diki to pomohlo, vyskušam  ..a pojdeto aj na ostatne triediace programky keď to zadefinujem rovnako?
|
|
Registrovaný: 19.09.09 Prihlásený: 12.09.13 Príspevky: 359 Témy: 55 | 55 Bydlisko: Rohožník |
Ak mas viacero triediacich funkcii v jednom programe a chces vediet dobu kaydeho, tak to urob ta, ze v kaydej funkcii budes merat cas, cize v kazdej si zadeklarujes to, co som ti napisal a na konci to vypises, alebo na konci funkcie vratis dobu a tu vypises potom v maine.
Da sa to spravit hocijako ... 
|
|
Registrovaný: 05.04.11 Prihlásený: 12.06.11 Príspevky: 5 Témy: 1 | 1 |
No mam to takto
Kód: #include<stdio.h> #include<time.h>
int main(){ int s,temp,i,j,a[100]; clock_t begin, end; float time;
printf("\nEnter size of the array: "); scanf("%d",&s); printf("\nEnter %d elements in to the array:",s);
for(i=0;i<s;i++) scanf("%d",&a[i]);
for(i=0;i<s-1;i++){
for(j=0;j<s-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } printf("\nThe array after sorting is: "); begin=clock();
for(i=0;i<s;i++) printf(" %5.1d",a[i]);
end=clock(); time = (float)(end - begin) / CLOCKS_PER_SEC; printf("\nTime is: %fs",time);
return 0; }
Možete mi ešte poradiť ako spravim aby mi to bralo aj pole znakou (a vypisalo dla abecedy) nielen pole cisel?
|
|
Registrovaný: 19.10.10 Prihlásený: 28.10.12 Príspevky: 41 Témy: 9 | 9 |
porovnaj ich ascii hodnoty
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
zaefrim to si teda poradil
1. ten begin=clock() mas momentalne tak, ze ti to meria dobu za ktoru to vypise to zoradene pole, hod ho medzi tie dva for cykly ked chces merat dobu trvania zoradovania.. a nemyslim ze nieco nameras ked tam budes mat pole do 100 hodnot.. daj si tam dake 10000-ove polia generovane randomom nacitavane zo suboru a tam uz namerias dake rozdiely, pokial ti ide o toto
2. Pole znakov zoradene podla abecedy zoradis samozrejme rovnako ako pole intov, v sorte nemusis prepisat ani riadok lebo c-cko dokaze chary spracovat uplne rovnako ako inty (teda automaticky ak sa spytas ci je B vacsie ako A tak ti povie ze hej, lebo B a A su v tych premennych v skutocnosti ulozene ako 66 a 65, a to ze ti ich na obrazovku vypise ako pismena urcuje akym flagom ich posielas printf-u/scanf-u (v tomto pripade daj %c namiesto %d a bude ti to nacitat/vypisovat znaky, a samozrejme predefinuj int a[100]; na char a[100])
3. naco vypisujes tie cisla ako "%5.1d"? aky ma zmysel urcovat pocet desatinnych miest pre celociselny typ premennej? "%5d " spravi to iste a je to ovela krajsi zapis 
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 22.02.10 Prihlásený: 02.01.19 Príspevky: 4512 Témy: 157 | 157 Bydlisko: Bratislava |
hej neblbnite už je veľa hodín choďte spať 
_________________ _________________ GIGABYTE P55-UD4--Intel Core i5-750 Quad-Core-- KINGSTON 8GB Turbo DDR3 1333MHz-- Zdroj Gigabyte ODIN GT 550W, GE-M550A-D1-- AMD 7870 GIGABYTE crossfire-- SSD Intel 330 180GB 500 MB/s a 450 MB/s --2x 1TB WD Caviar Black 3.5", SATA 300, 7200 rpm, 3Gb/s, 32MB, Black edition -- Monitor SAMSUNG FX2490HD 24" LED Notebook Lenovo ThinkPad Z61m CPU:duar core 2,00GHz RAM: 1,5 GB DDR2 667MHz kingston, GPU x1400 128MB/512MB HDD 90GB 2,5" SATA, 7200rmp lenovo Netebook Lenovo IdeaPad Y560 CPU i3 2,40GHz RAM: 4GB 1333MHz GPU: Ati 5730 1Gb HDD: 500GB 7200 rmp : Notebook Samsung 700Z CPU: Intel Core i7 3635QM RAM 8GB 1600MHz GPU: GT640m HDD1: SSD1: 128GB 550MB/s čítanie SSD2: 1000GB hdd/ssd DISPLEJ: 1600x900 antireflexný |
|
Registrovaný: 05.04.11 Prihlásený: 12.06.11 Príspevky: 5 Témy: 1 | 1 |
nBXXL diki za rady  , to %5.1d je omyl ja som nechtiac nakopiroval starsi zdrojak co som mal  .
A dalo yb sa to spravit tak ze by vypisalo vytriedene pole znakou alebo pole cisiel dla toho co tam zadam?(a,b,c alebo 1,2,3)
|
|
Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
|