常用,易错的算法

1,二分查找

  1. /**
  2.  * 二分查找算法
  3.  */
  4. int binarySearch(int* a,int &k,int n)
  5. {
  6.     int left = 0,right = n-1;
  7.     while(left <= right)
  8.     {
  9.         int middle = (left+right)>>>1;
  10.         if(k == a[middle])
  11.           return middle;
  12.         if(k < middle)
  13.           right = middle-1;
  14.         else left = middle+1;
  15.     }
  16.     return -1;   //未找到
  17. }

2,不用其他空间交换两个数

  1. /**
  2.  * 交换两个数
  3.  */
  4. int swap(int &a,int &b)
  5. {
  6.    if(a != b)
  7.     {
  8.         a = a+b;
  9.         b = a-b;
  10.         a = a-b;
  11.     }
  12. }
  13. int swap(int &a,int &b)
  14. {
  15.     if(a !=b)
  16.     {
  17.         a = a^b;
  18.         b = a^b;
  19.         a = a^b;
  20.     }
  21. }

3,求一个数的二进制中的1的个数

 

  1. int count(int n)
  2. {
  3.     int num = 0;
  4.     while(n)
  5.     {
  6.          n &= (n-1);   //n&(n-1)消去n的二进制中的一个1
  7.          num++;
  8.      }
  9.     return num;
  10. }

4,

待续……

你可能感兴趣的:(算法)