zoukankan      html  css  js  c++  java
  • 常用函数实现

    求最大公约数

    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++) != '');
        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 }
  • 相关阅读:
    [开源]WinForm 控件使用总结
    类型转换一种处理方式
    [算法]斐波那契数列
    [算法]1 − 2 + 3 − 4 + …
    [算法]冒泡排序
    [开源]基于Log4Net简单实现KafkaAppender
    基于Log4Net本地日志服务简单实现
    项目打jar包,怎么把第三放jar包一起打入
    将博客搬至CSDN
    将字段转换为阿拉伯数字
  • 原文地址:https://www.cnblogs.com/raichen/p/5803498.html
Copyright © 2011-2022 走看看