[板子]排序模板

快速排序:

void quick_sort (int q[], int l, int r)
{
    if (l>=r) return ;

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

    quick_sort(q, l, j);
    quick_sort(q, j+1, r);
}

归并排序:

void merge_sort (int q[], int l, int r)
{
    if (l>=r) return;
    int mid = (l+r) >> 1;
    merge_sort(q, l, mid);
    merge_sort(q, mid+1, r);

    int k=0;
    int 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; j!=k; ++j, ++i) q[i] = tmp[j];
}

逆序对的数量:

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

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

    while (i<=mid) tmp[k++] = q[i++];
    while (j<=r) tmp[k++] = q[j++];

    for (i=l,j=0; j!=k; ++i,++j) q[i] = tmp[j];
}
posted @   Akiho  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示