首页 > 其他分享 >排序(3种)

排序(3种)

时间:2024-01-27 19:23:33浏览次数:19  
标签:tmp int ++ mid merge while 排序

include...
using namespace std;
const int N=1e6+10;
int c[N],tmp[N];
void merge(int c[],int l,int r);//归并(稳定)
void quick(int c[],int l,int r)//快排(不稳定)
{
if(l>=r)return;
int x=c[(l+r)>>1],i=l-1,j=r+1;
while(i<j) {
do i++; while (c[i] < x);
do j--; while (c[j] > x);
if (i<j)swap(c[i], c[j]);
}
quick(c,l,j);
quick(c,j+1,r);
}
void merge(int c[],int l,int r)
{
if(l>=r)return;
int mid=l+r>>1;
merge(c,l,mid);//分而治之
merge(c,mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r)
{
if(c[i]>c[j])tmp[k++]=c[j++];
else tmp[k++]=c[i++];
}
while(i<=mid)tmp[k++]=c[i++];
while(j<=r)tmp[k++]=c[j++];
for(i=l,j=0;i<=r;j++,i++)
c[i]=tmp[j];
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&c[i]);
merge(c,0,n-1);
quick(c,0,n-1);
sort(c,c+n);//库函数
for(int i=0;i<n;i++)
printf("%d",c[i]);
return 0;
}

标签:tmp,int,++,mid,merge,while,排序
From: https://www.cnblogs.com/violet-hty/p/17991818

相关文章

  • 并归排序的应用 I
    目录1.题目列表2.应用2.1.Leetcode315.计算右侧小于当前元素的个数2.1.1.题目2.1.2.解题思路2.1.3.代码实现1.题目列表题目列表:序号题目难度1315.计算右侧小于当前元素的个数困难2.应用2.1.Leetcode315.计算右侧小于当前元素的个数2.1.1.......
  • 82. 删除排序链表中的重复元素 II(中)
    目录题目题解:双指针题目给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。题解:双指针题目给的头节点是第一个元素,处理起来较麻烦(需单独处理头节点);加上习惯用一个空的头节点,所以本题新建了一个虚拟头节点,以便统一......
  • 断网测试1-拓扑排序-Timeline G
    洛谷P6145第1题   TimelineG查看测评数据信息输入格式  输出格式  输入/输出例子1输入:4 10 31 2 3 41 2 52 4 23 4 4  输出:1638  样例解释无   第b次挤奶在a几挤奶结束至少x天后结束,所以用拓扑跟奖金很......
  • 洛谷题单指南-排序-P1177 【模板】排序
    原题链接:https://www.luogu.com.cn/problem/P1177题意解读:数据量为100000,必须用小于等于N*logN复杂度的排序算法,可以直接用sort,更重要需要掌握快速排序的过程。知识点:快速排序设定数组q[n],l,r第一步:确定分界点x可以取q[l]、q[(l+r)/2]、q[r]三种第二步:调整区间把<=x的数调......
  • 【板子】冒泡/选择/插入 排序
    #include<bits/stdc++.h>usingnamespacestd;#defineN101inta[N];voidsort_mp(){for(inti=1;i<100;i++){for(intj=1;j<100;j++){if(a[j]>a[j+1]){swap(a[j],a[j+1]);......
  • 【板子】快速排序
    #include<bits/stdc++.h>usingnamespacestd;inta[114514];voidQuicksort(intl,intr);intmain(){freopen("working.in","r",stdin);freopen("working.out","w",stdout);intn;cin>>n;......
  • 【板子】归并排序
    #include<bits/stdc++.h>usingnamespacestd;constintN=1e6+6;intn;inta[N];intb[N];voidMergesort(intl,intr);longlongcnt;intmain(){freopen("working.in","r",stdin);freopen("working.out",&......
  • 拓扑排序
    讲解  例题  第1题   拓扑序列对下图所示的有向图进行拓扑排序,得到的拓扑序列可能是() 第2题   拓扑序列_以下关于拓扑排序的说法中,错误的是()。 若某有向图存在环路,则该有向图一定不存在拓扑排序在拓扑排序算法中为暂存入度为零的顶点,可......
  • 拓扑排序模板
    给定一个DAG(有向无环图),如果从\(u\)到\(v\)有边,则认为\(v\)依赖于\(u\)。如果\(u\)到\(v\)有路径(\(u\)可达\(v\)),则称\(v\)间接依赖于\(u\)。我们将图中的顶点以线性方式进行排序,使得对于任何的顶点\(u\)到\(v\)的有向边\((u,v)\),都可以有\(u\)在\(v\)的......
  • 洛谷题单指南-排序-P1271 【深基9.例1】选举学生会
    原题链接:https://www.luogu.com.cn/problem/P1271题意解读:最直接的计数排序问题,借助一个桶h[N],对被投票的候选人x执行h[x]++,再按顺序遍历输出即可。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=1005;inth[N];intmain(){intn,m;......