Funkcja insertsort (qsort) do poprawy

0

Mam tutaj samą funkcje ponieważ wiem że ona źle dziala , tzn. źle sortuje i wydaje mi się że mam tutaj jakiś błąd przy zamianie (memcpy). Funkcja ta miała byc insertsortem ale z argumentami jak dla qsort .Funkcja ta dostaje rozmiar oraz teksty/daty ktore ma posortowac.

#include"sort.h"
#include <stdlib.h>
#include <string.h>
void insertsort (void **inputTab, int sizeOfTab, int sizeOfObject,int (*compar) (const void *, const void *), void (print)(void *)) {
   printf("insert sort start:\n");
  
   unsigned char *ptr = inputTab;
   unsigned char tmp[256];
   (*print)(ptr);
   int j;
   if(sizeOfTab < 2 || sizeOfObject == 0)
        return;
        
   for (int i = 1; i < sizeOfTab; i++) {
      
         memcpy(tmp,ptr + sizeOfObject * (i), sizeOfObject);
        //temp=inputTab[i];
         j=i-1;
         int result= (*compar)((ptr + sizeOfObject * j),(tmp));
	     while(j>=0 && result>0){
	          memcpy((ptr + sizeOfObject*(j+1)),(ptr + sizeOfObject*(j)), sizeOfObject);
	          printf("1 wartosc ; %s",(ptr + sizeOfObject*(j+1)));
	         //inputTab[j+1]=inputTab[j];
             j=j-1;
             
	     }
	      memcpy(ptr + sizeOfObject*(j+1),tmp, sizeOfObject);
	    
	//inputTab[j+1]=temp;
   }

}
0

Robisz tylko jedno porównanie, mimo że chcesz przenosić dopóki masz mniejszy element. W pętli while nie widzę niczego, co zmieniłoby result. Każdy element, który jest mniejszy od ostatniego przed nim, ląduje na początku tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1