C++归并算法
来源:互联网 发布:神武挖山水算法 编辑:程序博客网 时间:2024/05/02 01:45
如图是归并算法的示意图。打个比方,一个人对一副牌进行排序,然后他为了减轻工作,找来两位志愿者。每位志愿者拿牌的一半,然后分别对自己拿的那一叠牌进行排序。当把自己那一份从小到大排好之后。两位志愿者再把两叠牌合为一叠牌。规则如下:比较手中的牌,如果自己的牌小,就把牌放到桌面上。如果一方牌放完了,另一方就把牌全放上去。这就是归并。
#include <iostream>using namespace std;void divide(int A[],int mid,int start,int end){ //实现功能:把两个排好顺序的数组合并为一个。 int size=end-start+1; int *temp=new int[size+15],count=0; // 已经排好的两个数组分别是A[start,mid-1],A[mid,end] int i=start,j=mid; while(i<=mid-1 && j<=end){ if(A[i]<=A[j]){temp[count++]=A[i++];} // 归并 else{temp[count++]=A[j++];} } while(i<=mid-1){ // 把剩下的那个数组全部加到temp里 temp[count++]=A[i++]; } while(j<=end){ temp[count++]=A[j++]; } count=0; for(int i=start;i<=end;i++){ A[i]=temp[count++]; //把temp 复制到A里 } delete []temp; // 删掉temp}int merge(int A[],int start,int end){ int temp; if(end-start==1){ //当只有两个数时,直接比较,不用再递归。 if(A[start]>A[end]){ temp=A[start]; A[start]=A[end]; A[end]=temp; } } else if(end-start<=0){ return 0; } else{ int mid=(start+end)/2; // 递归部分 merge(A,start,mid-1); merge(A,mid,end); divide(A,mid,start,end); } }int main(){ int A[15]={19,2,15,3,21,8,9}; merge(A,0,6); for(int i=0;i<=6;i++){ cout<<A[i]<<" "; }}
0 0
- C语言归并算法
- 算法 - 归并排序(C#)
- 【算法】归并--C语言实现归并排序递归算法
- 数据结构(C#)_排序算法(归并排序)
- 归并排序算法 C代码实现
- 归并排序算法实现(C++)
- 归并排序算法 C代码实现
- 归并排序算法 C代码实现
- 算法导论 之 归并排序[C语言]
- 排序算法c语言描述---归并排序
- 【算法导论】归并排序,C语言实现
- 排序算法(C实现)-------- 归并排序
- C语言--归并排序算法实现
- 排序算法系列----归并排序(C++)
- C语言归并排序算法的实现
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- C语言实现归并排序算法
- 质量如何登入大雅之堂
- 新的开始
- SSL原理介绍
- Struts2 概述
- 关于弹出式(POPUP)对话框的显示
- C++归并算法
- Linux下的ELF文件格式简介
- struts搭建环境
- HOG特征
- 学拳录.第10势 前堂拗步
- week_7_homework
- 第四周作业
- 【LeetCode】Best Time to Buy and Sell Stock
- 自适应宽度