归并排序
来源:互联网 发布:李炎恢javascript讲义 编辑:程序博客网 时间:2024/06/06 08:26
看懂了这段代码,就真的理解了归并排序。
#include <iostream>class MergeSort{private:int *arr_;int size_;void mergeSort(int *tmp_p, int lowerBound, int upperBound){if(lowerBound == upperBound)return;else{int mid = (lowerBound + upperBound)/2;mergeSort(tmp_p, lowerBound, mid);mergeSort(tmp_p, mid+1, upperBound);merge(tmp_p,lowerBound,mid,upperBound);}}void merge(int *tmp_p, int lowerBound, int mid, int upperBound){int lower = lowerBound;int upper = mid+1;int tmp_ind = lowerBound;while((lower < mid + 1)&&(upper < upperBound + 1)){if(arr_[lower] < arr_[upper])tmp_p[tmp_ind++] = arr_[lower++];elsetmp_p[tmp_ind++] = arr_[upper++];}while(lower < mid + 1)tmp_p[tmp_ind++] = arr_[lower++];while(upper < upperBound + 1)tmp_p[tmp_ind++] = arr_[upper++];for(int j = lowerBound; j<=upperBound; j++)arr_[j] = tmp_p[j];}public:MergeSort(int maxSize):size_(0),arr_(new int[maxSize]){}~MergeSort(){delete[] arr_;}void insert(int data){arr_[size_++] = data;}int length(){return size_;}void display(){for(int i=0;i<size_;++i){std::cout << arr_[i];if(i < size_ - 1)std::cout << ",";}std::endl(std::cout);}void sort(){int *tmp_p = new int[size_];mergeSort(tmp_p, 0 , size_-1);delete[] tmp_p;}};int main(){MergeSort ms(100);ms.insert(2);ms.insert(1);ms.insert(4);ms.insert(3);ms.insert(0);ms.insert(10);ms.insert(5);ms.insert(-9);ms.display();ms.sort();ms.display();return 0;}
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Kernel panic - not syncing: No init found. yaffs2文件系统挂上找不到init
- UIImage 图片处理:截图,缩放,设定大小,存储
- 一个最简单的C#事件例子
- 每日雕蟲一技[2013-03-21]诡异的EasyUI-combobox
- 不要一辈子靠技术生存
- 归并排序
- 网络学习笔记
- 第三堂课后作业
- CCD、COMS,数字摄像头、模拟摄像头 区别和联系
- eclipse老是building workspace及自动更新问题,保存就更新
- 创业者的选择题:忠于理想还是忠于现实
- 2012-04-23 21:24 Makefile常用函数集
- 黑马程序员 线程
- c练习题