Może któryś z czytających będzie znał odpowiedź na moje pytanie. Próbuję napisać program, który pobierze dane do tablicy, następnie przesortuje je bąbelkowo, dalej pobierze zmienną i przeszuka wcześniej uzupełnioną tablicę w poszukiwaniu zmiennej (wykorzystując metodę dziel i zwyciężaj). Napisałem kod, kompilacja bezproblemowa (MS Visual C++ 2010 Express), jednak w programie jest jakiś błąd.
Kod: Zaznacz cały
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void wpisz(int tab[], int rozmiar) // wpisuje dane do tablicy
{
for (int i=0;i<rozmiar;i++)
{
cin >> tab[i];
}
}
void zamien(int &x, int &y) // zamienia wartosci danych w tablicy
{
int temp;
temp = x;
x = y;
y = temp;
}
void bubblesort(int tab[], int rozmiar) // sortuje tablice
{
for (int i=rozmiar-1; i>0; i--)
{
for (int j=0; j<i; i++)
{
if (tab[j]>tab[j+1])
zamien(tab[j], tab[j+1]);
}
}
}
int binarne (int poczatek, int koniec, int tab[], int szukany) // binarnie przeszukuje tablice, dzieli ja na czesci
{
if (poczatek<=koniec)
{
int srodek = (poczatek+koniec)/2;
if (tab[srodek]==szukany)
return srodek;
if (tab[srodek]>szukany)
return binarne(poczatek,srodek,tab,szukany);
else
return binarne(srodek+1,koniec,tab,szukany);
}
else
return -1;
}
int main()
{
int tab[20];
int rozmiar;
cout << "Ile elementow chcesz przeszukac? (max 20) ";
cin >> rozmiar;
cout << "Wpisz znane wartosci ciagu ";
wpisz(tab,rozmiar);
bubblesort(tab,rozmiar);
cout << "Jaki element jest poszukiwany? ";
int poszukiwany;
cin >> poszukiwany;
if (binarne(0,rozmiar,tab,poszukiwany)==-1)
cout << "Elementu nie ma w tablicy";
else cout << "Element znaleziono na pozycji " << binarne(0,rozmiar,tab,poszukiwany)+1;
cin.ignore();
getchar();
return 0;
}
Zwykła literówka w bubblesort, w pętli for. Poprawiony kod poniżej.
Kod: Zaznacz cały
void bubblesort(int tab[], int rozmiar) // sortuje tablice
{
for (int i=rozmiar-1; i>0; i--)
{
for (int j=0; j<i; j++) //tu był błąd, zamiast j++ wpisałem i++
{
if (tab[j]>tab[j+1])
zamien(tab[j], tab[j+1]);
}
}
}