归并排序法实现
来源:互联网 发布:魔兽世界战斗数据插件 编辑:程序博客网 时间:2024/05/23 22:27
/* 归并排序实现 coder:QPZ time:2014-12-03*/#include <time.h>#include <stdlib.h>#include <iostream>using namespace std;class Mergesort{ private: int *Arr; int n; public: Mergesort(int n){ this->n=n; srand((unsigned)time(NULL)); Arr=(int*)malloc(n*sizeof(int)); for(inti=0;i < n;i++){ Arr[i]=rand()%100; }/*endfor*/ } void Msort(int left,int right); void Merge(int left,int right,int rigntEnd); void PrinArr(); ~Mergesort(){ free(Arr); }};int main(void){ intn; cin>>n; classMergesort *p=new Mergesort(n); p->PrinArr(); p->Msort(0,n-1); p->PrinArr(); return0;}void Mergesort::PrinArr(){ for(inti=0;i<n;i++){ cout<<Arr[i]<<" "; }/*endfor*/ cout<<endl;}void Mergesort::Msort(int left,int right){ intmiddle; if(left<right){ middle=(left+right)/2; //分割数集 Msort(left,middle); Msort(middle+1,right); //归并操作 Merge(left,middle+1,right); }}void Mergesort::Merge(int left,int right,intrightEnd){ int*TmpArry=(int *)malloc((rightEnd-left+1)*sizeof(int)); inttmp; inti; intLeft=left; intRight=right; /*比大小赋值,结束后接*/ for(tmp=0;Left<right&& Right<=rightEnd;) { if(Arr[Left]<=Arr[Right]){ TmpArry[tmp++]=Arr[Left++]; } else{ TmpArry[tmp++]=Arr[Right++]; }/*end if else*/ }/*endfor*/ while(Left<right){ TmpArry[tmp++]=Arr[Left++]; } while(Right<rightEnd){ TmpArry[tmp++]=Arr[Right++]; } /*Tmp赋值返回*/ for(i=0,Left=left;i< tmp;i++){ Arr[Left++]=TmpArry[i]; }/*end for*/ free(TmpArry);}
0 0
- 归并排序法实现
- 分治法实现归并排序
- 分治法实现归并排序
- 归并排序法(MergeSort)c++实现
- 归并排序法的C++实现
- 归并排序 递归法 C语言 实现
- python二路归并排序实现法
- 利用手摇法实现原地归并排序
- 【算法】分治法之归并排序实现
- 3-2 归并排序法的实现
- 归并排序的实现
- 归并排序Java实现
- 归并排序的实现
- 【归并排序+实现】
- 归并排序的实现
- 归并排序 C++实现
- 归并排序(简单实现)
- 归并排序的实现
- 瞬间判断2的幂
- 装箱问题改进
- 随机数发生器说明
- 快速排序法的实现
- HuffmanTree
- 归并排序法实现
- hdu 1753 大明A+B (java大数)
- 蜗龙徒行-Spark学习笔记【一】初识Spark形成、演进、发展
- 数据库实现-概述
- 领悟javascript中的exec()和match()方法
- 第16周项目2-用指针玩转字符串-(4)统计单词个数
- 进程线程对比
- hdu_1016_素数圈
- 更常用的BRDF--------Phong光照方程