Sortowanie poprzez wstawianie

0

od kilku lat nie miałem takiego problemu z kodem, jeżeli można prosił bym aby wytknięto mi błędy :)

#include <stdio.h> 
#include <stdlib.h>




int main ()  { 
    
    
    // przygotowanie tablicy do sortowania
    int i,
        size=50,
        tab[size],
        stab[size]; // tab na posortowane
        
        for (i=0; i<size; i++) {
            tab[i]=rand()%100;
            printf("%d\n",tab[i]);
            stab[i]=0;
            }
        printf("Posortowane:  "); 
    // zmienne 
    
    int j=0,
        help,
        ii,
        test;
        i=0;
        
        
     
    
    //dowolny element do tablicy uporządkowanej
    stab[i]=tab[size-1];
    
    //wstawianie w miejscu w którym skończono porónywać 
    while (j <= size-1)
    {
        i=0;
        while(tab[j] > stab[i]) // szukanie numeru i elementu dla którego tab[j] > stab[i] 
            {
                i++;
                printf("%d",i);
                
          }   
            help = stab[i];
            stab[i] = tab[j]; // wstawianie w "środek" tab 
            if (j==i) 
                {
                   
                    stab[i] = tab[j]; 
                }
            else 
                {
                for (ii=j; i>ii;ii--)  // przesuwanie każdego elementu o jeden w prawo od elementu wstawionego 
                    {   
                        
                        stab[ii] = stab[ii-1];
                    }
                    stab[i]=help;
                }
               
        j++;
    }
    
    // wypisanie posortowanej tablicy 
    for (i=0; i<size; i++) {
            printf("%d\n",tab[i]);  
            }
    delete [] &tab;
    delete [] &stab;
            
                
                
}
                
    
    
        
    
 
0

Nie napisałeś jakiego błędu.
Z całą pewnością to:

    delete [] &tab;
    delete [] &stab;

należy wywalić.

0

przepraszam, z rozszerzeniem cpp działało ;d
chodzi mi o sam algorytm a nie zwalnianie pamięci, mam nadzieję że kod jest czytelny

0

To nie algorytm to jakaś sieczka.

  1. Po kiego masz dwie tablice?
  2. Po kiego masz ta obfuskacje: <=size-1 czy nie da się po ludzku <size
  3. Wsadzasz coś na początek tablicy po czym dodajesz size elementów, czyli w sumie wychodzi size+1 elementów w tablice rozmiarem size
  4. stab[i]=tab[j]; if(j==i) stab[i]=tab[j]; - naprawdę? Czy rozumiesz cokolwiek z tego co piszesz?
  5. "... od kilku lat nie miałem takiego problemu z kodem ..." - patrząc na to mogę stwierdzić że nigdy nie miałeś żadnego kodu bez problemów.

Skończ z tą obfuskacją bo sam nic nie rozumiesz.

0

dziękuję za odpowiedź i od razu się wytłumaczę.
Ten chory pseudo algorytm jest ze skryptu instytutu mojej uczelni. Wyraźnie jest mowa o 2 tablicach, bo po co oszczędzać pamięć? (sarkazm w razie czego.. )
znalazłem kod z wiki

 
void insertSort(int a[], int length)
{
    int value;
    int i;
    int j;
 
    for (i = 1; i < length; ++i) {
        value = a[i];
 
        for (j = i - 1; j >= 0 && a[j] > value; --j) {
            a[j + 1] = a[j];
        }
 
        a[j + 1] = value;
    }
}

ale coś chyba nie chce działać ( by najmniej mi nie działa, chociaż kod wygląda poprawnie...)

1

Pokaż jak to wywołujesz, wklej cały kod na Ideone, zapodaj tam dane, aby było widać że nie posortowało albo zrobiło to nie poprawnie.

0

dziękuję za poświęcony czas, dla potomnych pozostawiam kod:

 
#include <stdio.h> 
#include <stdlib.h>




int main ()  { 
    
    
    // przygotowanie tablicy do sortowania
    int i,
        size=50,
        tab[size];
       
        
        for (i=0; i<size; i++) {
            tab[i]=rand()%100;
            printf("%d\n",tab[i]);
            
            }
        
    // zmienne 
    
    int j,
        test;
    // sortowanie przez wstawianie z wikipedii 
    for (i = 1; i < size; ++i)
    {
        test = tab[i];
 
        for (j = i - 1; j >= 0 && tab[j] > test; --j) 
            {
                tab[j + 1] = tab[j];
            }
 
        tab[j + 1] = test;
    }
    
    
    // wypisanie posortowanej tablicy 
    printf("Posortowane:  \n"); 
    for (i=0; i<size; i++)
            {
            printf("%d\n",tab[i]);  
            }                
}

problem był związany z DevCpp. Jak zwykle miesza sobie w pamięci a później głupoty wypisuje, Ideon przetrawił kod i wyświetlił dobrze.
Pozdrawiam i zamykam.

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