Advertisement
Guest User

ghjhj

a guest
Nov 23rd, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define _USE_MATH_DEFINES
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. /*
  8. KT1
  9. Esittele 300 alkioinen int taulukko ja arvo siihen lukuja
  10. väliltä 1-1000. Kysy käyttäjältä hakuavain (haettava arvo) ja hae
  11. arvoa taulukosta peräkkäishaulla. Tulosta tieto monennellako kierroksella
  12. haettava tieto löytyi ja mistä indeksistä tai monennellako kierroksella
  13. selvisi, ettei haettavaa arvoa löytynyt
  14.  
  15. KT2
  16. Lisää edelliseen ohjelmaan jatkoksi. Lajittele taulukko valintalajittelulla
  17. ja hae arvoa puolitushaulla ja tulosta samat tiedot kuin yllä KT1:ssä
  18. */
  19. void Arvo(int* pT)
  20. {
  21.     int i;
  22.     srand((unsigned)time(NULL));
  23.     for (i = 0; i < 300; i++)
  24.     {
  25.         pT[i] = rand() % 1000 + 1;
  26.     }
  27. }
  28.  
  29. void Lajittele(int* pT)
  30. {
  31.     int i, j, tmp;
  32.  
  33.     for (i = 1; i <= 299; i++) // kuinka monta kertaa lajitellaan (koko - 1)
  34.     {
  35.         for (j = 0; j <= 298; j++) // varsinainen lajittelu
  36.         {
  37.             if (pT[j] > pT[j + 1])
  38.             {
  39.                 tmp = pT[j];
  40.                 pT[j] = pT[j + 1];
  41.                 pT[j + 1] = tmp;
  42.             }
  43.         }
  44.     }
  45. }
  46.  
  47. int PuolitusHaku(int* pT, int avain, int* pKierros)
  48. {
  49.     int left = 0, right = 199, center;
  50.     int ret = -1; // oletuksena avainta ei löydy taulukosta
  51.  
  52.     while (left <= right && ret == -1)
  53.     {
  54.         // kasvatetaan mainissa olevaa hakukierroksia muuttujaa yhdellä
  55.         (*pKierros)++; // *pKierros = *pKierros + 1;
  56.  
  57.                        // alustetaan center muuttuja keskikohtaan
  58.         center = (left + right) / 2;
  59.  
  60.         if (pT[center] == avain)
  61.         {
  62.             ret = center;
  63.         }
  64.         else
  65.         {
  66.             if (pT[center] > avain)
  67.             {
  68.                 right = center - 1;
  69.             }
  70.             else
  71.             {
  72.                 left = center + 1;
  73.             }
  74.         }
  75.     }
  76.     return ret;
  77. }
  78.  
  79. int Haku(int* pT, int avain)
  80. {
  81.     int i, ret = -1;
  82.  
  83.     for (i = 0; i < 300; i++)
  84.     {
  85.         if (pT[i] == avain)
  86.         {
  87.             ret = i;
  88.             i = 300;
  89.         }
  90.     }
  91.     return ret;
  92. }
  93.  
  94. void main()
  95. {
  96.     int taulu[300];
  97.     int hakuavain, index;
  98.     int hakukierrokset;
  99.  
  100.     Arvo(taulu);
  101.  
  102.     printf("Anna haettava arvo : ");
  103.     scanf("%d", &hakuavain);
  104.  
  105.     index = Haku(taulu, hakuavain);
  106.  
  107.     if (index == -1)
  108.     {
  109.         hakukierrokset = 200;
  110.         printf("Haettavaa arvoa ei löytynyt\n");
  111.     }
  112.     else
  113.     {
  114.         hakukierrokset = index + 1;
  115.         printf("Arvo löytyi indeksista %d\n", index);
  116.     }
  117.     printf("Perakkaishaku : %d kierrosta\n\n", hakukierrokset);
  118.  
  119.  
  120.     hakukierrokset = 0;
  121.  
  122.     Lajittele(taulu);
  123.     index = PuolitusHaku(taulu, hakuavain, &hakukierrokset);
  124.  
  125.     if (index == -1)
  126.     {
  127.         printf("Haettavaa tietoa ei löytynyt\n");
  128.     }
  129.     else
  130.     {
  131.         printf("Haettava tieto löytyi indeksista %d\n", index);
  132.     }
  133.     printf("Puolitushaku : %d kierrosta\n\n", hakukierrokset);
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement