Advertisement
ElfikCo

AiSD - Szukanie w tablicy

Apr 4th, 2019
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int szukanie_liniowe_1(int tab[], int n, int x);
  4. int * szukanie_liniowe_2(int tab[], int n, int x, int * ilosc);
  5. int szukanie_binarne(int tab[], int n, int x);
  6. int * sort(int tab[],int n);
  7.  
  8. int main(){
  9.     int ilosc = 2;
  10.     int i;
  11.     int * indeks = 0;
  12.     int tab[10] = {1,4,7,6,10,4,5,2,3,9};
  13.  
  14.     sort(tab,10);
  15.     for(i = 0; i < 10; i++){
  16.         printf("%d ",tab[i]);
  17.     }
  18.  
  19.     printf("\n%d\n",szukanie_liniowe_1(tab,10,4));
  20.  
  21.     indeks = szukanie_liniowe_2(tab,10,4,&ilosc);
  22.     for(i = 0; i < ilosc; i++){
  23.         printf("%d ",indeks[i]);
  24.     }
  25.  
  26.     printf("\n%d",szukanie_binarne(tab,10,4));
  27.  
  28.     getchar();
  29.  
  30.     return 0;
  31. }
  32.  
  33. int szukanie_liniowe_1(int tab[], int n, int x){
  34.     int i;
  35.     for(i = 0; i < n; i++){
  36.         if(tab[i] == x)
  37.             return i;
  38.     }
  39.     return -1;
  40. }
  41.  
  42. int * szukanie_liniowe_2(int tab[], int n, int x, int * ilosc){
  43.     int i;
  44.     int * index = 0;
  45.     *ilosc = 0;
  46.     for(i = 0; i < n; i++){
  47.         if(tab[i] == x) {
  48.             index = realloc(index,++(*ilosc)*sizeof(int));
  49.             index[(*ilosc) - 1] = i;
  50.         }
  51.     }
  52.     return index;
  53. }
  54.  
  55. int szukanie_binarne(int tab[], int n, int x){
  56.     int l = 0, r = n - 1, mid;
  57.     while(1){
  58.         if(l <= r){
  59.             mid = (l+r)/2;
  60.             if(tab[mid] == x)
  61.                 return mid;
  62.             else if(tab[mid] < x)
  63.                 l = mid + 1;
  64.             else if(tab[mid] > x)
  65.                 r = mid - 1;
  66.         }
  67.         else
  68.             return -1;
  69.     }
  70. }
  71.  
  72. int * sort(int tab[], int n){
  73.     int i,j,key;
  74.     for(i = 2; i < n; i++){
  75.         key = tab[i];
  76.         j = i - 1;
  77.         while(j > 0 && tab[j] > key){
  78.             tab[j+1] = tab[j];
  79.             j = j - 1;
  80.         }
  81.         tab[j+1] = key;
  82.     }
  83.     return tab;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement