RenHao

interview

May 13th, 2020
2,190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void Q1(int * a , int size);
  6. void Q2(int * a , int size , int b);
  7. void Q3(unsigned int DATA_A,unsigned int DATA_B);
  8.  
  9. #define TEST_BENCH_SIZE     20
  10. #define TEST_BENCH_MAX_NUM  500
  11.  
  12. #define SWAP(x,y,t) ( (t)=(x) , (x)=(y) , (y)=(t) )
  13.  
  14. // Q3
  15. struct ListNode{
  16.     unsigned int Data_H;
  17.     unsigned int Data_L;
  18.     unsigned int next_ptr;
  19. };
  20.  
  21. struct ListNode ListArray[500];
  22. #define Null 0xffff
  23. unsigned int listhead=0;
  24.  
  25. /* Quick Sort */
  26. void QuickSort(int a[],int left,int right)
  27. {
  28.     int pivot,i,j,temp=0;
  29.     if(left < right)
  30.     {
  31.         i = left ; j = right + 1;
  32.         pivot = a[left];
  33.         //printf("init pivot = %d i=%d j=%d\n",pivot,i,j);
  34.         do
  35.         {
  36.             do i++; while(a[i] < pivot && i<right);
  37.             do j--; while(a[j] > pivot && j>left);
  38.            // printf("[i=%d , j=%d]\n",i,j);
  39.             if (i<j) SWAP(a[i],a[j],temp);
  40.            // printAry(a, left,right+1);
  41.         } while (i<j);
  42.         SWAP(a[left],a[j],temp);
  43.         //printAry(a, left, right+1);
  44.         QuickSort(a, left, j-1);
  45.         QuickSort(a, j+1, right);
  46.     }
  47. }
  48.  
  49. int BinarySearch(int* a,int size,int target){
  50.     int L=0;
  51.     int R=size-1;
  52.     int mid;
  53.     int index=0;
  54.     while(L<R){
  55.         mid=(L+R)/2;
  56.         if(a[mid]==target){
  57.             return mid;
  58.         }
  59.         else if(a[mid]>target){
  60.             R=mid-1;
  61.         }
  62.         else if(a[mid]<target){
  63.             L=mid+1;
  64.         }
  65.     }
  66.     return L;
  67. }
  68.  
  69. int main()
  70. {
  71.     // Create a sorted array with random
  72.     int test_bench1[TEST_BENCH_SIZE] = {0};
  73.  
  74.     // Set random seed
  75.     srand(time(NULL));
  76.  
  77.     // Set data
  78.     printf("Set data\n");
  79.     for(int i = 0 ; i < TEST_BENCH_SIZE ; i++)
  80.     {
  81.         test_bench1[i] = rand( ) % TEST_BENCH_MAX_NUM + 1;
  82.         printf("[%d] %d\n" , i, test_bench1[i]);
  83.     }
  84.  
  85.     // Sorted
  86.     QuickSort(test_bench1 , 0 , TEST_BENCH_SIZE);
  87.  
  88.     printf("Sorted data\n");
  89.     for(int i = 0 ; i < TEST_BENCH_SIZE ; i++)
  90.     {
  91.         printf("[%d] %d\n" , i, test_bench1[i]);
  92.     }
  93.  
  94.     printf("Q1\n");
  95.     Q1(test_bench1 , TEST_BENCH_SIZE);
  96.  
  97.     printf("Q2\n");
  98.     Q2(test_bench1 , TEST_BENCH_SIZE , 0);
  99.  
  100.     system("pause");
  101.     return 0;
  102. }
  103.  
  104. void Q1(int * a , int size)
  105. {
  106.     int x=0,i=0;
  107.     int x_limit = 501;
  108.     for( ; x < x_limit && i < size ; x++)
  109.     {
  110.         if ( x == a[i] )
  111.             i++;
  112.         else
  113.             printf("%d %d %d\n" , x , i , a[i]);
  114.     }
  115.  
  116.     for( ; x < x_limit  ; x++)
  117.         printf("%d\n" , x);
  118. }
  119.  
  120. void Q2(int * a , int size , int b)
  121. {
  122.     int lo_bound = b*100;
  123.     int up_bound = (b+1)*100;
  124.     int mid = size / 2;
  125.     int x  = lo_bound;
  126.  
  127.     int startIdx = BinarySearch(a , size , lo_bound);
  128.  
  129.     for (int i = startIdx ; x < up_bound && i < size ; x++)
  130.     {
  131.         if ( x == a[i] )
  132.             i++;
  133.         else
  134.             printf("%d %d %d\n" , x , i , a[i]);
  135.     }
  136.  
  137.     for( ; x < up_bound  ; x++)
  138.         printf("%d\n" , x);
  139. }
  140.  
  141.  
  142. void Q3(unsigned int DATA_A,unsigned int DATA_B)
  143. {
  144.  
  145.     struct ListNode * curNode = &ListArray[listhead];
  146.  
  147.     for( ; curNode != NULL ; curNode = curNode->next_ptr )
  148.     {
  149.         // Search DATA_A
  150.         if ( curNode->Data_H == DATA_A )
  151.         {
  152.             // If found
  153.             // Search Data_B
  154.             goto FIND_DATA_B;
  155.         }
  156.     }
  157.  
  158.     goto NOT_FOUND;
  159.  
  160.     FIND_DATA_B:
  161.  
  162.     for( ; curNode != NULL ; curNode = curNode->next_ptr )
  163.     {
  164.         if ( curNode->Data_H != DATA_A )
  165.         {
  166.             // If found
  167.             // Search Data_B
  168.             goto NOT_FOUND;
  169.         }
  170.  
  171.         // Search DATA_B
  172.         if ( curNode->Data_L == DATA_B )
  173.         {
  174.             // If found
  175.             printf("Found data %d %d\n" , DATA_A , DATA_B);
  176.             return;
  177.         }
  178.     }
  179.  
  180.     NOT_FOUND:
  181.  
  182.     printf("Not found\n");
  183. }
Advertisement
Add Comment
Please, Sign In to add comment