【算法学习笔记】基础算法01 快排与归并

215 阅读1分钟

快速排序与归并排序的模板及分析

一、快速排序

将数组的 [l,r] 范围内的整数按升序排序

代码模板

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

二、归并排序

将数组的 [l,r] 范围内的整数按升序排序

模板代码

void merge_sort(int q[], int l, int r)
{
    if (r <= l) return;

    int mid = l + r >> 1;
    merge_sort(q, l, mid), merge_sort(q, mid + 1, r);

    int k = 0, i = l, j = mid + 1;
    while (i <= mid && j <= r)
    {
        if (q[i] <= q[j]) tmp[k ++ ] = q[i ++ ];
        else tmp[k ++ ] = q[j ++ ];
    }
    while (i <= mid) tmp[k ++ ] = q[i ++ ];
    while (j <= r) tmp[k ++ ] = q[j ++ ];

    for (i = l, j = 0; i <= r; i ++ , j ++ ) q[i] = tmp[j];
}