/*
Podsumowanie: Wyszukiwanie binarne porównuje wartość wyszukiwania z wartością środkowego elementu tablicy. Jeśli się zgadzają, zostanie znaleziony element dopasowujący i jego pozycja jest zwracana. W przeciwnym razie, jeśli wartość wyszukiwania jest mniejsza od wartości elementu środkowego, wówczas algorytm powtarza działanie na pod-tablicę na lewo od elementu środkowego lub, jeśli wartość wyszukiwania jest większa, w podklasie po prawej stronie.
Złożoność - O(log n)
*/
#include <stdio.h>
void main()
{
int array[10];
int i, j, num, temp, keynum;
int dol, srodek, gora;
printf("Podaj ilosc liczb do posortowania: \n");
scanf("%d", &num);
printf("Podaj wartosci tych liczb jedna po drugiej: \n");
for (i = 0; i < num; i++)
{
scanf("%d", &array[i]);
}
/* Bubble sorting begins */
for (i = 0; i < num; i++)
{
for (j = 0; j < (num - i - 1); j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
printf("Posortowana tablica wyglada nastepujaco...\n");
for (i = 0; i < num; i++)
{
printf("%d\n", array[i]);
}
printf("Wprowadz element ktory ma zostac znaleziony: \n");
scanf("%d", &keynum);
/* Binary searching begins */
dol = 1;
gora = num;
do
{
srodek = (dol + gora) / 2;
if (keynum < array[srodek])
gora = srodek - 1;
else if (keynum > array[srodek])
dol = srodek + 1;
} while (keynum != array[srodek] && dol <= gora);
if (keynum == array[srodek])
{
printf("WYSZUKIWANIE ZAKONCZONE \n");
printf("Wprowadzona wartosc znajduje sie na pozycji:%d ",srodek+1);
}
else
{
printf("WYSZUKIWANIE ZAKONCZONE BLEDEM! \n Numer pozycji nie zostal znaleziony.");
}
getch();
}
/*
Input: EPodaj ilosc liczb do posortowania:
5
Podaj wartosci tych liczb jedna po drugiej:
23
90
56
15
58
Posortowana tablica wyglada nastepujaco...
15
23
56
58
90
Wprowadz element ktory ma zostac znaleziony:
58
*/