拍个QuickSort

  1. void Swap(int *a, int *b)
  2. {
  3.     int tmp = *a;
  4.     *a = *b;   
  5.     *b = tmp;   
  6. }
  7.  
  8. int partition(int *a, int p, int r)
  9. {
  10.     int x = a[r];
  11.     int i = p - 1;
  12.     int j = p;
  13.    
  14.     for (; j <= (r - 1); j++)
  15.         if (a[j] < x)
  16.         {
  17.             i++;
  18.             Swap(&a[i], &a[j]);
  19.         }
  20.     Swap(&a[i+1], &a[r]);
  21.     return i+1;
  22. }
  23.    
  24.        
  25. void quickSort(int *a, int p, int r)
  26. {
  27.     if (p < r) {
  28.         int q = partition(a, p, r);
  29.         quickSort(a, p, q - 1);
  30.         quickSort(a, q + 1, r);
  31.     }
  32. }
  33. int main(int argc, char *argv[])
  34. {
  35.     int a[] = {0, 8, 7, 1, 3, 5, 6, 4};
  36.     int sorted[8] = {0,1,3,4,5,6,7,8};
  37.     int ii = 0;
  38.    
  39.     quickSort(a, 2, 7);
  40.     for(; ii < 8; ii++)
  41.         //if(sorted[ii] != a[ii])
  42.             printf("failed in %d\n", a[ii]);
  43.  
  44.     // printf("Success\n");
  45.    
  46. //    int k1 = 3, k2 = 4;
  47. //    int a[2] ={0,1};
  48.    
  49.    
  50.     /* Swap(&a[0], &a[1]);   */
  51.     /* printf("k1=%d, k2=%d", a[0], a[1]); */
  52.    
  53.     return 0;
  54. }
  55.  
  56.  

 

在阿里巴巴吃到的蜇

 #include <stdio.h>

int printer(int x)
{
    int counter = 0;
    while(x) {
        counter++;
        x = x & (x-1);//算一的个数
    }
    return counter;
}

int main()
{
    printf("%d\n", printer(9999));
    return 0;
}

Fast median search

 a asic implementationn

  1. #define ELEM_SWAP(a, b) {
  2.     register elem_type t = (a); (a) = (b); (b) = (t);
  3. }
  4.  
  5. elem_type quickSelect(elem_type arr[], int n)
  6. {
  7.     int low, high;
  8.     int median;
  9.     int middle, ll, hh;
  10.  
  11.     low = 0;
  12.     high = n - 1;
  13.     median = (low + high) / 2;
  14.     for (; ;)
  15.     {
  16.         if (high < low)         /* one element only */
  17.             return arr[median];
  18.         if (high == low + 1) {
  19.             /* Two elements only */
  20.             if (arr[low] > arr[high])
  21.                 ELEM_SWAP(arr[low], arr[high]);
  22.             return arr[median];
  23.         }
  24.  
  25.         /* Find median of low, median and high items; Swap into positin low */
  26.         middle = (low + high) / 2;
  27.         if (arr[middle] > arr[high]) ELEM_SWAP(arr[middle], arr[high]);
  28.         if (arr[low] > arr[high]) ELEM_SWAP(arr[low], arr[high]);
  29.         if (arr[middle] > arr[low]) ELEM_SWAP(arr[middle], arr[low]);
  30.  
  31.         /* Swap low item (now in position middle) into low + 1 */
  32.         ELEM_SWAP(arr[middle], arr[low+1]);
  33.  
  34.         /* Nibble from each end towards middle, swapping items was stuck */
  35.         ll = low + 1;
  36.         hh = high;
  37.         for (;;)
  38.         {
  39.             do ll++; while (arr[low] > arr[ll]);
  40.             do hh--; while (arr[hh] > arr[low]);
  41.  
  42.             if (hh < ll) break;
  43.             ELEM_SWAP(arr[ll], arr[hh]);
  44.            
  45.         }
  46.         /* Swap middle item (in position low) back into position */
  47.         ELEM_SWAP(arr[low], arr[hh]);
  48.         /* Re-set actieve partition */
  49.         if (hh <= median)
  50.             low = ll;
  51.         if (hh >= median)
  52.             high = hh - 1;
  53.     }
  54. }
  55.  
  56.