9.23

9.23

(1)今天做了一点面试的题
(2)学了一个合并排序
递归实现:
void mergesort(int data[], int buffer,int low,int high)
{
if(low<high) //注意是if来判断,而不是while,作为递归出口
{
int mid=(low+high)/2;
mergesort(data,buffer,low,mid); //递归处理前半部分
mergesort(data,buffer,mid+1,high); //递归处理后半部分
merge(data,buffer,low,mid,high); //合并两个已经排序的子数组
for(int i=low;low<=high;low++)
{
data[i]=buffer[i];
}
}
}

//合并函数
void merge(int data[],int buffer,int low,int mid,int high)
{
int i=low;
int j=mid+1;
int k=low;
while(i<=mid&&j<=high)
{
if(data[i]<data[j]
{
buffer[k]=data[i];
k++;
i++;
}
else{
buffer[k]=data[j];
k++;
j++;
}
}

if(i<=mid){ //将data[low,mid]剩下的部分移到buffer中
for(int q=i;i<=mid;i++){
buffer[k]=data[q];
k++;
}
}
else{ //将data[mid+1,high]剩下的部分移到buffer中
for(int q=i;i<=high;i++){
buffer[k]=data[q];
k++;
}
}
}

非递归实现:
非递归是没有“分”的过程,直接将数列看成一个一个的,并从一开始进行两两合并。
void mergesort(int data[],int buffer[],int low,int high)
{
int step=1; //设置起始步长,起始步长为1;
int len=high-low+1; //计算数组的长度;
while(step<=len){
int i=0;
while(i<len-2step){
merge(data,buffer,i,i+step-1,i+2
step-1);
i=i+2step;
}
if(i+step<len){ //剩下的元素在小于2
step和大于step中间
merge(data,buffer,i,i+step-1,high);
}
else //剩下的元素个数小于step
{
for(int k=i;k<=high;k++)
{
buffer[k]=data[k];
}
}
for(int k=low;k<=high;k++) //将buffer中的元素倒回data中
{
data[k]=buffer[k];
}

step=step+step;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值