c++面试必须熟练掌握的算法(持续更新)

1.归并排序 时间复杂度O(nlogn) 辅助空间O(n) 稳定
void merge_sort(int *A,int x,int y,int *T)    //对数组A [x,y)排序 数组T是辅助空间
{
    if(y-x>=2)    //至少有两个元素才排序
    {
        int m=x+(y-x)/2;                    //第一步划分
        int p=x,q=m,i=x;
        
        merge_sort(A,x,m,T);                //第二步递归求解
        merge_sort(A,m,y,T);        
        
        while(p=y||(p


2.快速排序 时间复杂度O(nlogn) 辅助存储O(logn) 不稳定
void QuickSort(int A[],int p,int r)        //对数组A [p,r]
{
    if(pkey)        ;    //空语句
        if(i>=j)
            break;
        swap(A[i],A[j]);
    }
    swap(A[j],A[p]);
    return j;
}


3.二分查找
int bsearch(int *A,int x,int y,int v)    //在有序数组A [x,y) 查找v
{
    int m;
    while(xv)
            y=m;    //[x,m)
        else
            x=m+1;    //[m+1,y)
    }
    
    return -1;    //查找失败
}


你可能感兴趣的:(c++面试必须熟练掌握的算法(持续更新))