logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zaimplementować sortowanie bąbelkowe na wskaźnikach w C++?

kurzymis 16 Mar 2005 18:31 2118 6
REKLAMA
  • #1 1321160
    kurzymis
    Poziom 11  
    Posty: 67
    Ocena: 4
    witam,
    potrzebuje na jutro na laborki z infy umiec sortowanie (obojetnie jakie, moze byc np. babelkowe) byleby bylo zrobione na wskaznikach.. bo takie normalne to mam.
    bylbym wdzieczny za pomoc
    pozdr.
  • REKLAMA
  • Pomocny post
    #2 1321453
    johny_84
    Poziom 16  
    Posty: 235
    Pomógł: 13
    Ocena: 3
    Witam!

    Jak może być bąbelkowe to prosze bardzo :)

    #define N 10 // liczba komorek w pamieci

    int *tab;
    int tmp;

    tab = new int[N]; // przydziela pamiec dla 10 wartosci

    for (int i = 0; i < N; i++)
    for (int j = 0; j < N - 1; j++)
    if (tab[j] > tab[j + 1]) // jesli poprzedni wiekszy od nastepnego
    { // sortuje rosnaco :)
    tmp = tab[j];
    tab[j] = tab[j + 1];
    tab[j + 1] = tmp;
    }
    //wypisanie tablicy

    delete tab[]; //kasujemy tablice

    To tyle :)

    Narka :)
  • REKLAMA
  • #3 1321596
    kurzymis
    Poziom 11  
    Posty: 67
    Ocena: 4
    wielkie dzieki :)
  • #4 1321978
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Podany wyżej przykład jest na wartościach a nie wskaźnikach.
  • REKLAMA
  • #5 1322353
    johny_84
    Poziom 16  
    Posty: 235
    Pomógł: 13
    Ocena: 3
    To co teraz napisalem dziala identycznie jak to wczesniej tylko ze jawnie przez wskaznik, a tamto bylo niejawnie przez wskaznik jako tablica. Mozna tak i mozna tak :)

    #define N 10 // liczba komorek w pamieci

    int *tab;
    int tmp;

    tab = new int[N]; // przydziela pamiec dla 10 wartosci

    for (int i = 0; i < N; i++)
    for (int j = 0; j < N - 1; j++)
    if (*(tab + j) > *(tab + j + 1)) // jesli poprzedni wiekszy od nastepnego
    { // sortuje rosnaco
    tmp = *(tab + j);
    *(tab + j) = *(tab + j + 1);
    *(tab + j + 1) = tmp;
    }
    //wypisanie tablicy

    delete tab; //kasujemy tablice

    Kto nie wierzy niech sprawdzi :) I to i to dziala na wskaznikach :)

    Narka :):):)
  • REKLAMA
  • #6 1363006
    zagrycha
    Poziom 12  
    Posty: 34
    Ocena: 1
    a, jak jtos wie, ja potzrebuje na jutro tez na laborki sortowanie, tylko jakiekolwiek byle by nie bąbelkowe :D
  • #7 1363228
    tmg83
    Poziom 14  
    Posty: 68
    Pomógł: 5
    int quicksort(long rozmiar, long *tablica){
        long x;
        long *tmp;
        long i,j,k;
        if(rozmiar<=1)
            return;
        else{
            x=rozmiar/2;
            quicksort(x, tablica);
            quicksort(rozmiar-x, tablica+x);
            tmp=(long*)malloc(rozmiar*sizeof(long));
            i=0;
            j=x;
            k=0;
            while(k<rozmiar){
                if(i<x && (j>=rozmiar || tablica[i]<tablica[j]))
                    tmp[k++]=tablica[i++];
                else
                    tmp[k++]=tablica[j++];
            }
            memcpy(tablica, tmp, sizeof(long)*rozmiar);
            free(tmp);
        }
    }

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji sortowania bąbelkowego w C++ z użyciem wskaźników. Przykładowy kod pokazuje alokację dynamiczną tablicy za pomocą operatora new oraz sortowanie przez porównywanie i zamianę elementów wskazywanych przez wskaźniki. Wskazano różnicę między operowaniem na tablicy jako wskaźniku a jawnej arytmetyce wskaźnikowej (użycie *(tab + j) zamiast tab[j]). Podkreślono, że oba podejścia działają na wskaźnikach. Dodatkowo pojawił się przykład implementacji sortowania szybkiego (quicksort) z użyciem wskaźników i dynamicznej alokacji pamięci w stylu C (malloc, free). Wskazano także poprawne zwalnianie pamięci po zakończeniu sortowania. Temat obejmuje podstawy zarządzania pamięcią dynamiczną, wskaźniki, arytmetykę wskaźnikową oraz klasyczne algorytmy sortowania w kontekście C++.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA