首页 > 其他分享 >归并排序

归并排序

时间:2024-03-07 21:36:06浏览次数:22  
标签:sort 归并 ch int ++ mid merge 排序

include

include

using namespace std;

int n,a[100100],b[100100];

template
inline void read(type &x)
{
x=0;bool flag(0);char ch=getchar();
while(!isdigit(ch)) flag^=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
flag?x=-x:0;
}

template
inline void write(type x,bool mode)
{
x<0?x=-x,putchar('-'):0;static short Stack[100],top(0);
do Stack[++top]=x%10,x/=10;while(x);
while(top) putchar(Stack[top--]|48);
mode?puts(""):putchar(' ');
}

void merge_sort(int l,int r)
{
if(l==r) return;
int mid=(l+r)>>1;
merge_sort(l,mid);
merge_sort(mid+1,r);
int t1=l,t2=mid+1;
for(int i=l;i<=r;i++)
{
if(t1>mid) b[i]=a[t2++];
else if(t2>r) b[i]=a[t1++];
else if(a[t1]<=a[t2]) b[i]=a[t1++];//若要从大到小排序,只需将这里的<=改为>即可
else b[i]=a[t2++];
}
for(int i=l;i<=r;i++) a[i]=b[i];
return;
}

signed main()
{
read(n);
for(int i=1;i<=n;i++) read(a[i]);
merge_sort(1,n);
for(int i=1;i<=n;i++) write(a[i],0);
return 0;
}

标签:sort,归并,ch,int,++,mid,merge,排序
From: https://www.cnblogs.com/biubiulove/p/18059802

相关文章

  • VUE GRID WITH COMPONENT排序
    父组件:<!--Anexampleofcreatingareusablegridcomponentandusingitwithexternaldata.--><scriptsetup>importDemoGridfrom'../components/Grid.vue'import{ref}from'vue'constsearchQuery=ref('')......
  • 33. 搜索旋转排序数组(中)
    目录题目二分搜索题目整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1......
  • 查找/排序算法
    //二分查找publicstaticbooleanBinarySearch(inttarget,int[]array){intleft=0;intright=array.length-1;while(left<=right){intmiddle=(left+right)/2;//中间位置if(array[middle]<target)......
  • mssql排序order by42000报错解决
    原文链接:https://blog.csdn.net/wang1qqqq/article/details/122961882在mssql查询中,如果子查询中使用orderby,会出现报错:[42000][Microsoft][ODBCDriver17forSQLServer][SQLServer]除非另外还指定了TOP、OFFSET或FORXML,否则,ORDERBY子句在视图、内联函数、派生表、子......
  • linux对文件内容去重,排序与不排序
    方法一,使用uniq相关命令进行去重用法:uniq[选项]...[输入文件[输出文件]]从<输入文件>(或标准输入)中过滤内容相同的相邻的行,并写到<输出文件>(或标准输出)。不带选项时,内容相同的行将仅输出一次。长选项的必选参数对于短选项也是必选的。-c,--count在每行......
  • 快速排序的三种实现及简单优化(内附代码实现)
    概念​ 先贴一段百度:快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素key,利用key将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。步......
  • ULID(Universally Unique Lexicographically Sortable Identifier)是一种用于生成全局唯
    ULID(UniversallyUniqueLexicographicallySortableIdentifier)是一种用于生成全局唯一、可按字典序排序的标识符的格式。ULID结合了时间戳和随机数的特性,旨在提供高性能、低碰撞、可排序和易读的标识符。ULID的主要特点包括:全局唯一性:通过结合时间戳和随机数的方式,ULID可以生......
  • Qt表格排序例子
    表格排序是Qt内建支持的,用起来很简单。只需要在QtCreator界面给QTableView或QTableWidget的SortingEnabled属性设置为true就行了。本文将对这两种控件分别展示一下效果和一个自定义的排序例子。一、QTableWidget这个不需要任何代码,只需要设计界面时候启用排序就行了。下面直接......
  • 147. 对链表进行插入排序(中)
    目录题目题解优化题目给定单个链表的头head,使用插入排序对链表进行排序,并返回排序后链表的头。插入排序算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在......
  • 力扣80.删除排序数组中的重复项 II
    题目:给你一个有序数组nums,请你删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。实现方法:使用map计数,用快慢指针方法,快指针不断加一,慢指针在计数小于出现次数时加一,再将快指针指向的数赋给慢指针指向的数。funcremoveDuplicates(nums......