Sortowanie przez wstawienie, pomoc

0

Mam do napisanie algorytm, który będzie wstawiał do pustej początkowo tablicy elementy i te elementy będą ustawiane od razu na właściwym miejscu (tzn. tablica będzie posortowana rosnąco) dzięki zastosowaniu algorytmu sortowania przez wstawianie.

#include <iostream>

using namespace std;

void Wstawianie(int tab[],int liczba,int rozmiar)
{
    int j=0;
    liczba=tab[rozmiar-1];
      for(j = rozmiar-1; j >= 0 and tab[ j ] > liczba; j-- )
      {
            tab[ j + 1 ] = tab[ j ];
      }

    tab[ j + 1 ] = liczba;
}

int main()
{
    int liczba=0;
    const int rozmiar=5;
    int tab[rozmiar]={0};
    for(int i=1;i<=3;i++)
    {
        cout << "Podaj liczbe" << endl;
        cin >> liczba;
        Wstawianie(tab,liczba,rozmiar);
    }
    for (int i=0;i<rozmiar;i++)
    {
        cout << tab[i] << " ";
    }
    return 0;
}
 

Niestety algo mi nie działa. Będę wdzięczny za pomoc.

1

Przede wszystkim wywołując funkcję Wstawianie podawaj aktualną ilość elementów jako rozmiar, a nie zaalokowaną wielkość. Poza tym chyba widzę błędy typu off-by-one, ale nie chce mi się ich analizować.

0

Tablica ma 5 zer. Po wstawieniu do niej 3 liczb,np.: 9 7 3 chcę, aby wyglądała tak 0 0 3 7 9

1

Robiąc: liczba=tab[rozmiar-1]; nadpisujesz parametr. Bez sensu.
Startujesz z for(j = rozmiar-1; a pierwszą instrukcją w forze jest tab[ j + 1 ]. Z tego prosty wniosek że zapisujesz coś w tab[rozmiar], a więc wyjeżdżasz poza tablicę.

Poza tym:

j >= 0 and tab[ j ] > liczba;

and w c++??????????????????????????

0

Tej panowie. Teraz ta już nie wiem jak napisać mój algo, bo zauważyłem, że cały mój kod jest do kitu.

0

Najpierw wczytaj dane, a potem posortuj tablicę.
No i oczywiście przepisz jeszcze ten kod sortowania.

0

Patryk27. Tak to każdy umie. Ja dostałem zadanie napisania funkcji, który wstawia elementy do tablicy, tak aby po zakończeniu wstawiania tablica była już posortowana.

0

std::vector

0
#include <iostream>
#include <set>
using namespace std;

int main(){
	multiset<int> ms;
	int temp;

	while(cin >> temp)
		ms.insert(temp);

	for(auto item : ms)
		cout << item << " ";
}

in:
1 23 51 13 23 1 1309 2014 1410
out:
1 1 13 23 23 51 1309 1410 2014
Pisząc w C++, używajmy C++.

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