• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie własne

VPS Starter Arubacloud
0 głosów
262 wizyt
pytanie zadane 29 kwietnia 2016 w C i C++ przez Matt987 Użytkownik (800 p.)

Mam problem chcę posortować od najmniejszej do największej liczby tablicę. Wiem, że są na necie sortowania bąbelkowe i inne gotowe itp. ale ja uparłem się żeby wymyślić to samemu. I powinno działać wszystko według mnie ale po uruchomieniu żadna liczba w tablicy nie zmienia swojego miejsca w tablicy

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
int wyraz[10],tymczasowa;

void funkcja()
{
    srand(time(NULL));
    for(int i=0;i<10;i++)
    {
      wyraz[i]=rand()%49;
      cout<<wyraz[i]<<endl;
    }
    cout<<endl;


for(int i=10;i<0;i--)
{
    if(wyraz[i]<wyraz[i-1])
    {
        tymczasowa=wyraz[i];
        wyraz[i]=wyraz[i-1];
        wyraz[i-1]=tymczasowa;
    }
}


for(int i=0;i<10;i++)
    {
      cout<<wyraz[i]<<endl;
    }

    }


int main()
{
    funkcja();

getchar();
    return 0;
}

 

komentarz 29 kwietnia 2016 przez Matt987 Użytkownik (800 p.)
Dobra haha już nieważne w pętli for zamiast > dałem < .
komentarz 29 kwietnia 2016 przez niezalogowany
Odwołujesz się poza zakres tablicy w linii 19 przy pierwszym obiegu pętli
komentarz 29 kwietnia 2016 przez Matt987 Użytkownik (800 p.)
Dobra już poprawione, niby podmienia na odpowiednią kolejność, ale nie wszystkie. Nie mam pojęcia czemu.
komentarz 29 kwietnia 2016 przez draghan VIP (106,230 p.)
Bo Ty tylko zamieniasz dwie sąsiadujące ze sobą liczby. ;) Żeby posortować całą tablicę, musisz dodać jeszcze jedną pętlę.

W najprostszym przypadku taka pętla powinna wykonać się tyle razy, ile jest elementów w tablicy. Takie rozwiązanie działa, ale jest nieefektywne - bo nie zawsze trzeba przeglądać całą tablicę, kiedy niektóre liczby są już posortowane... Ale to małe wyzwanie już zostawiam dla Ciebie. :)
komentarz 29 kwietnia 2016 przez niezalogowany
Dodajmy że w sumie musisz wykonać przynajmniej N-1 iteracji, bo to co napisał @draghan jest prawdą, ale dotyczy wewnętrznej pętli (nie wiem czy dokładnie to widać, bo ja musiałem się wczytać żeby zauważyć że wciąż mówi o tej drugiej pętli a nie ogólnie o algorytmie sortującym).

Btw i tak ci wyjdzie coś w stylu bubble sorta

1 odpowiedź

0 głosów
odpowiedź 29 kwietnia 2016 przez Konrad Nabożny Stary wyjadacz (13,460 p.)
Przede wszystkim możesz zastąpić tymczasową zmienną i te dwie linie zamieniające mniejsze - większe jedną funkcją swap(zmienna, zmienna); Niejednokrotnie ułatwia ona życie.
komentarz 30 kwietnia 2016 przez Matt987 Użytkownik (800 p.)

Wcześniej wszystko już działało, ale po użyciu funkcji swap pojawia się po posortowaniu na początku dodatkowe 0 WHy?

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;
int wyraz[10],tymczasowa;

void funkcja()
{
    srand(time(NULL));
    for(int i=0;i<10;i++)
    {
      wyraz[i]=rand()%49;
      cout<<wyraz[i]<<endl;
    }
    cout<<endl;

for(int j=0;j<9;j++)
{
for(int i=10;i>0;i--)
{
    if(wyraz[i]<wyraz[i-1])
    {
       swap(wyraz[i],wyraz[i-1]);
    }
}
}

for(int i=0;i<10;i++)
    {
      cout<<wyraz[i]<<endl;
    }

    }


int main()
{
    funkcja();

getchar();
    return 0;
}

 

komentarz 30 kwietnia 2016 przez DragonCoder Nałogowiec (36,500 p.)
edycja 30 kwietnia 2016 przez DragonCoder
Zauwaz ze podczas wypisania chcesz 10 liczb i je masz ale przy sortowaniu tez masz ale lacznie z zerem. Ja to skompilowalem po prostu tak ze zamiast 10 dalem 11 i wtedy mam 10 liczb losowych i 11 to zero. Ae ze istnieje lepszy sposob. To popelniles bledy w if´ach. Bo i poniewaz wypisujesz liczbe mniejsza od 10 a te liczby powninny byc mniejsze lub rowne. Popraw to a na pewno zadziala. Tu kod jak cos:http://wklej.org/id/2368529/. I milego weekendu zycze :)
komentarz 30 kwietnia 2016 przez Matt987 Użytkownik (800 p.)
Dzięki wielkie już rozumiem teraz spróbuję wykombinować coś prostszego :)
komentarz 30 kwietnia 2016 przez Matt987 Użytkownik (800 p.)
Co oznacza zapis int *tab w tym:

void sortowanie_babelkowe(int *tab, int n)
komentarz 30 kwietnia 2016 przez DragonCoder Nałogowiec (36,500 p.)
Nie rozumiem z jakiego powodu cos prosteszego. Wystarczy dac w funkcjach if "=" i to tyle. Mi po podaniu dziala jak nalezy.

Podobne pytania

0 głosów
2 odpowiedzi 93 wizyt
pytanie zadane 8 maja 2023 w C i C++ przez Janchess Początkujący (480 p.)
0 głosów
1 odpowiedź 97 wizyt
pytanie zadane 27 sierpnia 2022 w C i C++ przez Jerzy Użytkownik (870 p.)
0 głosów
1 odpowiedź 722 wizyt
pytanie zadane 24 kwietnia 2022 w C i C++ przez Mavimix Dyskutant (8,390 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...