Sortowanie poprzez wstawianie

Odpowiedz Nowy wątek
2013-11-24 10:49

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

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;

}

Pozostało 580 znaków

2013-11-24 11:44

Rejestracja: 14 lat temu

Ostatnio: 3 dni temu

0

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

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

należy wywalić.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-11-24 12:29

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

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

Zwalniasz to czego nie przydzieliłeś, "zadziałało" bo po tej bezczelności nic nie próbowałeś przydzielić. - _13th_Dragon 2013-11-24 12:34

Pozostało 580 znaków

2013-11-24 12:45

Rejestracja: 14 lat temu

Ostatnio: 3 dni temu

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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2013-11-24 12:47

Pozostało 580 znaków

2013-11-24 13:02

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

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

Pozostało 580 znaków

2013-11-24 13:06

Rejestracja: 14 lat temu

Ostatnio: 3 dni temu

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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-11-24 13:27

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

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.

Chrzani waść, DevCpp ma ten sam kompilator co ideone. - _13th_Dragon 2013-11-24 13:29
hmm.. nigdy Ci się nie zbugował? ogólnie to jeszcze mam win 8 beta z bugami w sys więc różne rzeczy się dzieją ;d gcc compiler - tak wiem. pod DevCpp nadpisujesz kod, wszystko się ładnie kompiluje a jednak kod jest z przed chwili nadpisania.. rozwiązaniem tego problemu jest ponowne uruchomienie OS. co do "chrzanienia" pamiętam z pascala (FPC czy też devPascal) że też działy się takie rzeczy - Anaxis 2013-11-24 13:50
Mówisz o doświadczeniu sprzed 10 lat? Czy naprawdę sadzisz że brak możliwości nadpisania pliku przez DevCpp pod win 8 beta jest w jakikolwiek sposób winą DevCpp? - _13th_Dragon 2013-11-24 13:57
mówię o doświadczeniu z początków programowania w technikum, 5 lat temu. nie wiem czy ma to wpływ czy nie ( chociaż jak już wspominałem, mam radoche jak mi się OS buguje i dzieją się różne rzeczy..) chodzi o to że tak się dzieje. proponuję w tym miejscu zakończyć tą debatę. Pozdrawiam i dzięki za czas - Anaxis 2013-11-24 14:01

Pozostało 580 znaków

Odpowiedz

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