算法导论笔记之----合并排序
来源:互联网 发布:数据交换平台技术规范 编辑:程序博客网 时间:2024/06/01 07:11
合并排序,思想很简单,先分再合,这种算法不仔细看,很容易以为是快速排序。实际上相差很大。合并排序,每次分,都是取中间的一个位置,然后用递归,将一组T个数据分成T组一个数据的数组,然后再合并起来。(都是根据数组的下标进行运算,所以从0开始)
///合并排序#include<iostream>using namespace std;void m_sort(int *arr,int begin,int middle,int end){ int M,N; int i,j; int *left,*right; M=middle+1-begin; N=end-middle; left=new int[M]; right=new int[N]; memset(left,0,M*4); memset(right,0,N*4); for(i=0;i<M;++i) left[i]=arr[begin+i]; for(i=0;i<N;++i) right[i]=arr[middle+i+1]; i=j=0 ; int t=begin; while(i<M&&j<N) { if(left[i]<right[j]) arr[t++]=left[i++]; else arr[t++]=right[j++]; } while(i<M) arr[t++]=left[i++]; while(j<N) arr[t++]=right[j++]; delete left; delete right;}void Merge(int *arr,int begin,int end){ int middle; if(begin<end) { middle=(begin+end)/2; Merge(arr,begin,middle); Merge(arr,middle+1,end); m_sort(arr,begin,middle,end); }}int main(){ int T=0;int *arr;while(cin>>T,T){arr=new int[T];cout<<"please input "<<T<<"numbers: ";for(int i=0;i<T;++i)cin>>arr[i]; Merge(arr,0,T-1); for(int i=0;i<T;++i)cout<<arr[i]<<" ";cout<<endl;delete arr;}return 0;}图:
- 算法导论笔记之----合并排序
- 算法导论笔记之---合并排序应用之求逆序数
- 算法导论学习之插入排序+合并排序
- 算法导论学习笔记——合并排序
- 算法导论学习笔记(二):合并排序
- 【算法导论】 2.3合并排序
- 【算法导论】合并排序法
- 算法导论笔记之堆排序
- 算法导论笔记之快速排序
- 算法导论笔记之---插入排序
- 算法导论笔记之----堆排序
- 算法导论笔记之----随机快速排序
- 算法导论之快速排序---学习笔记
- 【算法导论笔记】排序
- 算法导论学习笔记(一)排序算法之快速排序
- 算法导论学习笔记(一)排序算法之堆排序
- 合并排序算法函数(算法导论)
- 合并排序算法函数(算法导论)
- 数据库事务的原理
- 最短的,用上JS所有关键字代码
- 实现客户端与服务器的交互
- 常用WEB框架Struts1、Struts2和Spring MVC大PK(二)(转)
- JSTL学习笔记
- 算法导论笔记之----合并排序
- Struts学习笔记
- 一步一步复习数据结构和算法基础-插入排序(1)
- java中字符流与字节流的区别
- su: Authentication failure 错误
- OpenID使用详解
- 平静心情五招
- RS一485接口电路的设计
- 经验是借口