Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void merge (int array[], int left, int right, int middle)
- {
- int i,j,k;
- int n1 = middle - left + 1;
- int n2 = right - middle;
- int left_arr[n1], right_arr[n2];
- for (i=0; i<n1; i++)
- left_arr[i] = array[i+left];
- for (j=0; j<n2; j++)
- right_arr[j] = array[middle + j + 1];
- i=j=0;
- k=left;
- while (i < n1 && j < n2)
- {
- if (left_arr[i] <= right_arr[j])
- array[k] = left_arr[i++];
- else
- array[k] = right_arr[j++];
- k++;
- }
- while (i < n1)
- {
- array[k]=left_arr[i++];
- k++;
- }
- while (j < n2)
- {
- array[k]=right_arr[j++];
- k++;
- }
- }
- void ms(int arr[], int left, int right)
- {
- int middle;
- if ( left < right )
- {
- middle = (right+left)/2;
- ms(arr, left, middle);
- ms(arr, middle+1, right);
- merge(arr, left, right, middle);
- }
- }
- int bsrch(int left, int right, int n, int array[])
- {
- int mid = (left+right)/2;
- if (left<mid)
- {
- if (n == array[mid])
- {
- printf("Found it!\nPos:%d\n", mid);
- return mid;
- }
- else if (n < array[mid])
- bsrch(left, mid, n, array);
- else bsrch(mid, right, n, array);
- }
- else return -1;
- }
- int main ()
- {
- int array[] = {12, 4, 22, -5, 0, 0, -22, 332, 215, -3, 215};
- int n = sizeof(array)/sizeof(int);
- //printf("%d\n", n);
- for (int i = 0; i < n; i++)
- printf("%d ", array[i]);
- printf("\n");
- ms(array, 0, n);
- for (int i = 0; i < n; i++)
- printf("%d ", array[i]);
- printf("\n");
- if (bsrch(0,n,215,array)==-1)
- printf("Couldn't find it\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement