常用函数实现

求最大公约数

int gcd(int a, int b)
{
    if (a == 0 || b == 0)
        return 0;
    int tmp = 0;
    while (b != 0)
    {
        tmp = b;
        b = a%b;
        a = tmp;
    }
    return a;
}

交换swap

template <class T>
void swap(T &a, T &b)
{
    T c(std::move(a));
    a = std::move(b);
    b = std::move(c);
}
   a = a ^ b;
    b = a ^ b;
    a = a ^ b;

 

求某个区间随机数

int RandomlnRange()
{
    if (start > end)
        return -1;
    return rand() % (end - start + 1) + start;
}

分割数组Partition

int Partition_v1(vector<int>& num, int low, int high)
{
    int pivot = num[low];
    while (low < high)
    {
        while (low < high && num[high] >= pivot)
            --high;
        num[low] = num[high];
        while (low < high && num[low] <= pivot)
            ++low;
        num[high] = num[low];
    }
    num[low] = pivot;
    return low;
}

 

分解质因数(面试题考过)

void Analyse(int n)
{
    //打印出  
    int i;
    for (i = 2; i <= sqrt(static_cast<double>(n)); i++)
    {
        if (n % i == 0)
        {
            n = n / i;
            cout << i << "*";
            i--;
        }
    }
    cout << n << endl;

}

 

不用加号计算两数和

int add(int a, int b)
{
    if (b == 0)
        return a;
    int sum = a^b;
    int carry = (a&b) << 1;
    return add(sum, carry);
}

strcpy

char *strcpy(char *strDest, const char *strSrc)
{
    assert(strDest != NULL && strSrc != NULL);
    char *address = strDest;
    while ((*strDest++ = *strSrc++) != '\0');
    return address;
}

二分查找

 1  #include <iostream>
 2 
 3 using namespace std;
 4 
 5 /*
 6 *二分查找思想:1、数组从小到大排序;2、查找的key每次和中间数比较,如果key小于mid
 7 查找mid左侧的数组部分;如果key大于mid,则查找mid右侧的数组部分;如果相等,则直接返回mid。
 8 
 9 输入:排序数组-array,数组大小-aSize,查找值-key
10 返回:返回数组中的相应位置,否则返回-1
11 */
12 //非递归查找
13 int BinarySearch(int *array, int aSize, int key)
14 {
15     if ( array == NULL || aSize == 0 )
16         return -1;
17     int low = 0;
18     int high = aSize - 1;
19     int mid = 0;
20 
21     while ( low <= high )
22     {
23         mid = (low + high )/2;
24         
25         if ( array[mid] < key)
26             low = mid + 1;
27         else if ( array[mid] > key )   
28             high = mid - 1;
29         else
30             return mid;
31     }
32     return -1;
33 }
34 //递归
35 int BinarySearchRecursive(int *array, int low, int high, int key)
36 {
37     if ( low > high )
38         return -1;
39     int mid = ( low + high )/2;
40     
41     if ( array[mid] == key )
42         return mid;
43     else if ( array[mid] < key )
44         return BinarySearchRecursive(array, mid+1, high, key);
45     else
46         return BinarySearchRecursive(array, low, mid-1, key);
47 }
48 
49 int main()
50 {
51     int array[10];
52     for (int i=0; i<10; i++)
53         array[i] = i;
54 
55     cout<<"No recursive:"<<endl;
56     cout<<"position:"<<BinarySearch(array, 10, 6)<<endl;
57     cout<<"recursive:"<<endl;
58     cout<<"position:"<<BinarySearchRecursive(array, 0, 9, 6)<<endl;
59 
60     return 0;
61 }

 

posted on 2016-08-24 19:18  已停更  阅读(258)  评论(0编辑  收藏  举报