算法基础——排序和二分

74 阅读1分钟

1、快速排序_template

void quick_sort(int* db,int l,int r)
{
    if(l >= r) return;
    int i = l + 1;
    int j = r - 1;
    int poivt = db[l + r >> 1];
    while(i < j)
    {
        do i++; while(db[i] < poivt);
        do j--; while(db[j] > poivt);
        if(i < j) swap(db[i],db[j]);
    }
    quick_sort(db,l,j);
    quick_sort(db,j+1,r);
}

2、归并排序_template

int tem[N];
void merge_sort(int *db,int l,int r)
{
    if(l >= r) return;
    int mid = l + r >> 1;
    merge_sort(db,l,mid);
    merge_sort(db,mid + 1,r);
    int k = 0;
    int i = l;
    int j = mid + 1;
    while(i <= mid && j <= r)
    {
        if(db[i] <= db[i]) tem[k++] = db[i ++];
        else tem[k++] = db[j++];
    }
    while(i <= mid) tem[k++] = db[i++];
    while(j <= r) tem[k++] = db[j++];
}