Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define _USE_MATH_DEFINES
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- /*
- KT1
- Esittele 300 alkioinen int taulukko ja arvo siihen lukuja
- väliltä 1-1000. Kysy käyttäjältä hakuavain (haettava arvo) ja hae
- arvoa taulukosta peräkkäishaulla. Tulosta tieto monennellako kierroksella
- haettava tieto löytyi ja mistä indeksistä tai monennellako kierroksella
- selvisi, ettei haettavaa arvoa löytynyt
- KT2
- Lisää edelliseen ohjelmaan jatkoksi. Lajittele taulukko valintalajittelulla
- ja hae arvoa puolitushaulla ja tulosta samat tiedot kuin yllä KT1:ssä
- */
- void Arvo(int* pT)
- {
- int i;
- srand((unsigned)time(NULL));
- for (i = 0; i < 300; i++)
- {
- pT[i] = rand() % 1000 + 1;
- }
- }
- void Lajittele(int* pT)
- {
- int i, j, tmp;
- for (i = 1; i <= 299; i++) // kuinka monta kertaa lajitellaan (koko - 1)
- {
- for (j = 0; j <= 298; j++) // varsinainen lajittelu
- {
- if (pT[j] > pT[j + 1])
- {
- tmp = pT[j];
- pT[j] = pT[j + 1];
- pT[j + 1] = tmp;
- }
- }
- }
- }
- int PuolitusHaku(int* pT, int avain, int* pKierros)
- {
- int left = 0, right = 199, center;
- int ret = -1; // oletuksena avainta ei löydy taulukosta
- while (left <= right && ret == -1)
- {
- // kasvatetaan mainissa olevaa hakukierroksia muuttujaa yhdellä
- (*pKierros)++; // *pKierros = *pKierros + 1;
- // alustetaan center muuttuja keskikohtaan
- center = (left + right) / 2;
- if (pT[center] == avain)
- {
- ret = center;
- }
- else
- {
- if (pT[center] > avain)
- {
- right = center - 1;
- }
- else
- {
- left = center + 1;
- }
- }
- }
- return ret;
- }
- int Haku(int* pT, int avain)
- {
- int i, ret = -1;
- for (i = 0; i < 300; i++)
- {
- if (pT[i] == avain)
- {
- ret = i;
- i = 300;
- }
- }
- return ret;
- }
- void main()
- {
- int taulu[300];
- int hakuavain, index;
- int hakukierrokset;
- Arvo(taulu);
- printf("Anna haettava arvo : ");
- scanf("%d", &hakuavain);
- index = Haku(taulu, hakuavain);
- if (index == -1)
- {
- hakukierrokset = 200;
- printf("Haettavaa arvoa ei löytynyt\n");
- }
- else
- {
- hakukierrokset = index + 1;
- printf("Arvo löytyi indeksista %d\n", index);
- }
- printf("Perakkaishaku : %d kierrosta\n\n", hakukierrokset);
- hakukierrokset = 0;
- Lajittele(taulu);
- index = PuolitusHaku(taulu, hakuavain, &hakukierrokset);
- if (index == -1)
- {
- printf("Haettavaa tietoa ei löytynyt\n");
- }
- else
- {
- printf("Haettava tieto löytyi indeksista %d\n", index);
- }
- printf("Puolitushaku : %d kierrosta\n\n", hakukierrokset);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement