Proszę, wyselekcjonowałem to, co nie działa poprawnie w moim kodzie (w mniejszy program ilustrujący mój problem):
Czy mógłby mi ktoś wskazać co i dlaczego robię źle w celu posortowania struktury?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct struktura{
int val;
}struktura;
void merge(struktura *wskaz, int poczatek, int srodek, int koniec){
struktura* tab[16];
int i=poczatek, j=srodek+1, licznik=0;
while(i!=srodek+1 && j!=koniec+1){
if((wskaz+i)->val >(wskaz+j)->val){
tab[licznik]=(wskaz+j);
++j;
++licznik;
}
else{
tab[licznik]=(wskaz+i);
++i;
++licznik;
}
}
while(j!=koniec+1){
tab[licznik]=(wskaz+j);
++j;
++licznik;
}
while(i!=srodek+1){
tab[licznik]=(wskaz+i);
++i;
++licznik;
}
memcpy(wskaz, tab, 16*sizeof(struktura));
}
void merge_sort(struktura *wsk, int poczatek, int koniec){
int srodek;
if(poczatek!=koniec){
srodek=(poczatek+koniec)/2;
merge_sort(wsk, poczatek, srodek);
merge_sort(wsk, srodek+1, koniec);
merge(wsk, poczatek, srodek, koniec);
}
}
int main(){
int a;
struktura *wsk_struct = (struktura*) malloc (16 *sizeof(struktura));
int tablica[]={12, 3, 4, 2, 7, 9, 44, 90, 21, 32, 56, 29, 13, 14, 6, 10};
for(a=0; a<16; ++a){
(wsk_struct+a)->val=tablica[a];
printf("%d ", tablica[a]);
}
printf("\n");
merge_sort(wsk_struct, 0, 15);
for(a=0; a<16; ++a)
printf("%d ", (wsk_struct+a)->val);
printf("\n");
getchar();
return 0;
}
Czy mógłby mi ktoś wskazać co i dlaczego robię źle w celu posortowania struktury?