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

Algorytm sortowania

0 głosów
375 wizyt
pytanie zadane 8 maja 2020 w C i C++ przez Wiktor Michalski Początkujący (430 p.)
edycja 8 maja 2020 przez Wiktor Michalski

Cześć mam napisać algorytm sortowanie przez wstawianie. Ma posortować 10 wylosowanych liczb. Za każdym razem 1 liczbę zjada i zamienia na 0 w ostatniej komórce tablicy, może ktoś z was widzi błąd:

#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;

int main()
{
	int tab[10];
	int pos[10];
	srand(time(NULL));
	for(int i=0;i<10;i++)
	{
		tab[i]=rand()%50;
		cout<<tab[i]<<endl;
		if(i==9)cout<<endl;
	}
	for(int i=0;i<10;i++)
	{
		if(i==0)pos[i]=tab[i];
		else if(i==1)
		{
			if(tab[i]<pos[i-1])
			{
				int liczba3=pos[i-1];
				pos[i-1]=tab[i];
				pos[i]=liczba3;
			}
		}
		else
		{
			int find=0;
			for(int j=0;j<i;j++)
			{
				if(tab[i]<pos[j])
				{
					int liczba[i-j+1];
					int l=0;
					for(int k=j;k<i;k++)
					{
						liczba[l]=pos[k];
						l++;
					}
					l=0;
					for(int k=j+1;k<i;k++)
					{
						pos[k]=liczba[l];
						l++;
					}
					pos[j]=tab[i];
					find=1;
					break;
				}
				if(j==i-1&&find==0)
				{
					pos[j]=tab[i];
				}
			}
		}
	}
	for(int i=0;i<10;i++)cout<<pos[i]<<endl;
	
	
}

 

1 odpowiedź

+1 głos
odpowiedź 8 maja 2020 przez Whistleroosh Maniak (57,400 p.)
wybrane 8 maja 2020 przez Wiktor Michalski
 
Najlepsza
#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;

int main()
{
    int* tab = new int[10];
    int* pos = new int[10];

    srand(time(NULL));

    for (int i = 0; i < 10; i++)
    {
        tab[i] = rand() % 50;
        cout << tab[i] << endl;

        if (i == 9)
            cout << endl;
    }
    for (int i = 0; i < 10; i++)
    {
        if (i == 0)
            pos[i] = tab[i];

        else if (i == 1)
        {
            if (tab[i] < pos[i - 1])
            {
                int liczba3 = pos[i - 1];
                pos[i - 1] = tab[i];
                pos[i] = liczba3;
            }

            else
                pos[i] = tab[i];
        }
        else
        {
            int find = 0;
            for (int j = 0; j < i; j++)
            {
                if (tab[i] < pos[j])
                {
                    int* liczba = new int[i - j];
                    int l = 0;

                    for (int k = j; k < i; k++)
                    {
                        liczba[l] = pos[k];
                        l++;
                    }

                    l = 0;

                    for (int k = j + 1; k <= i; k++)
                    {
                        pos[k] = liczba[l];
                        l++;
                    }
                    pos[j] = tab[i];
                    find = 1;

                    delete[] liczba;
                    break;
                }
                if (j == i - 1 && find == 0)
                    pos[i] = tab[i];
            }
        }
    }

    for (int i = 0; i < 10; i++)
        cout << pos[i] << endl;

    delete[] tab;
    delete[] pos;
}

Chyba udało mi się naprawić ten program. Takie większe błędy jakie miałeś to:

  1. Jeżeli i == 1 i tab[i]>=pos[i-1] to nic się nie dzieje (linia 22)
  2. Rozmiar tablicy liczba jest o 1 za duży (linia 36)
  3. W linii 44 powinno być k<=i
  4. W linii 55 powinno być pos[i]=tab[i]

(Chodzi mi o linie w Twoim programie, nie moim)

Podobne pytania

0 głosów
1 odpowiedź 887 wizyt
0 głosów
1 odpowiedź 758 wizyt
pytanie zadane 21 stycznia 2019 w Rozwój zawodowy, nauka, praca przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 550 wizyt
pytanie zadane 6 marca 2020 w C i C++ przez Ambitnystudent Nowicjusz (120 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...