Laboratorium nr 12

Temat: Wykorzystanie funkcji qsort() do sortowania tablic. Program z poprzednich wicze (tzn.

sortowanie oraz baza danych) zmodyfikowa tak, aby korzystał z funkcji qsort().

1) Zastosowanie funkcji qsort().

a) w przypadku liczb

# include <stdio.h>

# include <conio.h>

# include <stdlib.h>

# include <time.h>

const int N=20;

int losuj(int *losowa, int *sort, int *qsort){

int i;

for(i=0;i<N;i++){

losowa[i]=rand();

sort[i]=losowa[i];

qsort[i]=losowa[i];

};

return(0);

}

int sortuj(int *sort){

int i,j,liczba;

for(i=0;i<N-1;i++){

for (j=0;j<N-1-i;j++){

if(sort[j]>sort[j+1]){

liczba=sort[j];

sort[j]=sort[j+1];

sort[j+1]=liczba;

}

}

}

return(0);

}

int porownaj(const void *p, const void *q){

int a,b;

a=*(int const*) p;

b=*(int const*) q;

if (a<b) return -1;

if (a==b) return 0;

if (a>b) return 1;

return 0;

}

int wyswietl(int *losowa, int *sort, int *qsort){

int i;

printf("Numer\tLosowa\t\Sort\tQSort\n");

for(i=0;i<N;i++)

printf("%i\t %i\t %i\t %i\n",i,losowa[i],sort[i], qsort[i]); return(0);

}

int main () {

int tab[N], tab_sort[N], tab_qsort[N];

clock_t poczatek,koniec;

float Dczas1,Dczas2;

losuj(tab,tab_sort,tab_qsort);

/* Sortowanie 1*/

poczatek = clock();

sortuj(tab_sort);

koniec=clock();

Dczas1=(koniec-poczatek)/CLK_TCK;

/* Sortowanie 2*/

poczatek=clock();

qsort(tab_qsort,N,sizeof(int),porownaj);

koniec=clock();

Dczas2=(koniec-poczatek)/CLK_TCK;

/* Koniec*/

wyswietl(tab,tab_sort,tab_qsort);

printf("Czas sortowania-1 = %f [s]\n",Dczas1);

printf("Czas sortowania-2 = %f [s]\n",Dczas2);

getch();

return(0);

}

Uwaga:

• Zapozna si z deklaracj funkcji: qsort()

• Sprawdzi czas sortowania dla wi kszej liczby danych, np. N=10 000

• Zapozna si z funkcj clock() oraz stał CLK_TCK

b) w przypadku ła cucha znaków

# include <stdio.h>

# include <conio.h>

# include <stdlib.h>

# include <string.h>

int porownaj( const void *a, const void *b){

return (strcmp((char *)a,(char *)b) );

}

int main(void) {

int i;

char tab[7][10] = {"Ala", "Ola", "Mirek", "Szymon", "Darek", "Wacek", "Ela"}; char tab_sort[7][10] = {"Ala", "Ola", "Mirek", "Szymon", "Darek", "Wacek", "Ela"}; qsort((void *)tab_sort, 7, sizeof(tab[0]), porownaj);

for (i=0; i<7; i++)

printf("%s\t %s\n", tab[i], tab_sort[i]);

getch();

return 0;

}

2) Zadanie: Popraw utworzon na poprzednich wiczeniach baz danych tak, aby sortowała rekordy wg.

imienia, nazwiska itp., korzystaj c z funkcji qsort() Przykładowe menu programu: 1. Utwórz baz

2. Pobierz i wy wietl baz

3. Uporz dkuj i wy wietl wg. imienia

4. Uporz dkuj i wy wietl wg. Nazwiska

5. itp.