Advertisement
Guest User

Untitled

a guest
May 27th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.58 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. int comp_3(const void* a, const void* b)
  5. {
  6.     if ((*(float*)a ) > (*(float*)b))
  7.         return 1;
  8.     else if ((*(float*)a ) == (*(float*)b))
  9.         return 0;
  10.     else
  11.         return -1;
  12. }
  13. int comp_4(const void* a, const void* b)
  14. {
  15.     if ((*(double*)a ) > (*(double*)b))
  16.         return 1;
  17.     else if ((*(double*)a ) == (*(double*)b))
  18.         return 0;
  19.     else
  20.         return -1;
  21. }
  22. int comp_1(const void* a, const void* b)
  23. {
  24.     if ((*(int*)a ) > (*(int*)b))
  25.         return 1;
  26.     else if ((*(int*)a ) == (*(int*)b))
  27.         return 0;
  28.     else
  29.         return -1;
  30. }
  31. int comp_2(const void* a, const void* b)
  32. {
  33.     return strcmp(*(char**)a, *(char**)b);
  34. }
  35. int qsort_1(void* array, size_t size, int N, void* search, int (*cmp)(const void*, const void*))
  36. {
  37.     int left = 0;
  38.     int right =     N;
  39.     int mid = 0;   
  40.    
  41.     while(left < right)
  42.     {
  43.         mid = (right + left) / 2;
  44.  
  45.         if(cmp ((char*)array + size*mid, search) < 0 )
  46.         {
  47.             left = mid + 1;
  48.         }
  49.         else if (cmp ((char*)array + size*mid, search) == 0)
  50.         {
  51.             return mid;
  52.         }
  53.         else
  54.             right = mid;
  55.     }
  56.     if (left > right)
  57.         return -1;
  58. }
  59.  
  60. int main()
  61. {
  62.     int arr[7] = {1, 2, 3, 4, 5, 6, 7};
  63.     float arr2[7] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.1};
  64.     double arr3[7] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.1};
  65.     char* Sarr[7] = {"aaa","bbb","ccc","ddd","eee","fff","ggg"};
  66.     int key = 3;
  67.     char key1 = '1';
  68.     float key4 = 5.5;
  69.     double key5 = 7.2;
  70.     printf("(%d)", qsort_1(arr3, sizeof(double), 7, &key5, comp_4));
  71.     //printf("(%d)", qsort_1(arr2, sizeof(float), 7, &key4, comp_3));
  72.     //printf("%d", qsort_1(Sarr, sizeof(char*), 7, &key1, comp_2));
  73.    
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement