[C++] Przeszukiwanie binarne z sortowaniem bąbelkowym

iglomosh
Użytkownik
Użytkownik
Posty: 75
Rejestracja: 6 maja 2010, o 18:05
Płeć: Mężczyzna
Podziękował: 16 razy
Pomógł: 6 razy

[C++] Przeszukiwanie binarne z sortowaniem bąbelkowym

Post autor: iglomosh »

Witam.
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;
}
Proszę o pomoc w poszukiwaniu błędu.-- 22 mar 2012, o 23:30 --Problem rozwiązany! Czcionka, jaka jest ustawiona na forum dla kodów pozwoliła dostrzec mój błąd .
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]);
      }
   }
}
ODPOWIEDZ