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();
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.