算法二十天
第四天
二分归并排序算法
二分归并排序是很稳定的算法,有必要理解和掌握
图解其原理
原理和代码都不难主要是对它的掌握度
#include<bits/stdc++.h>
using namespace std;
void hebing(vector<int>& temp,int left,int size,int right)
{
vector<int> a;
int i=left;
int k=size+1;
while(i<=size&&k<=right)//把数组里的数据比较并放入辅助数组
{
if(temp[i]<=temp[k])
{
a.push_back(temp[i]);
i++;
}
else
{
a.push_back(temp[k]);
k++;
}
}
while(i<=size)//将剩余的数据读入
{
a.push_back(temp[i++]);
}
while(k<=right)
{
a.push_back(temp[k++]);
}
//temp=a;//错误写法,脑子糊涂了
for(int i=left;i<=right;i++)
temp[i]=a[i-left];
//将数组合并后放入对应位置
}
void erFenGui(vector<int>& temp,int left,int right)
{
if(left>=right)
return;
else
{
int size=(left+right)/2;
erFenGui(temp,left,size);
erFenGui(temp,size+1,right);
hebing(temp,left,size,right);
}
}
int main()
{
vector<int> temp={1,9,8,6,5,4};
erFenGui(temp,0,5);
for(auto& i:temp)
cout<<i;
}
对于所有的常见排序算法一定要能很熟练的写出来这样才能在使用到的时候更加灵活的运用