归并排序算法心得
来源:互联网 发布:13458淘宝信用查询 编辑:程序博客网 时间:2024/06/03 09:56
void merge(int Array[], int first, int mid, int last){int Array1[10];int first1 = first;int last1 = mid;int first2 = mid + 1;int last2 = last; int index = first1;//这里index赋值为first,而并不是0,是因为函数传进的值往往不从0开始。while ((first1 <= last1) && (first2 <= last2)){if (Array[first1] <= Array[first2]){Array1[index] = Array[first1];first1++;}else{Array1[index] = Array[first2];first2++;}index++;}while (first2 <= last2)//1{Array1[index] = Array[first2];first2++;index++;}while (first1 <= last1)//2{Array1[index] = Array[first1];first1++;index++;}cout << endl;for (index = first; index <= last; index++)//这里index的值也是相同理由。{Array[index] = Array1[index];}cout << endl;}void mergeSort(int Array[], int first, int last){if (first < last){int mid = first + (last - first) / 2;cout << "1 "<<first << " " << mid << " " << last << endl;mergeSort(Array, first, mid);cout <<"2 "<< first << " " << mid << " " << last << endl;mergeSort(Array, mid + 1, last);cout <<"3 "<< first << " " << mid << " " << last << endl;merge(Array, first, mid, last);}}
首先递归,可以很明显看出,递归是从第一个函数一层一层执行下去,直至变为一个元素。
在执行第二个函数,再次生成单元素数组;执行第三个函数合并数组,重复,直至到函数执行结束。
在合并函数中,第二个和第三个循环是用来将未存入临时数组的数据存入,因为是有序数组,
所以只存在一个数组为完全存入,且数据已完成排序,即之后元素之直接复制就好,
不在需要任何操作。则这两个循环可以互调位置,不影响程序结果。
程序代码来至C++数据抽象与问题求解(第六版)
阅读全文
0 0
- 归并排序算法心得
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- Html5--本地文本文件读取与保存
- 11g中高‘Resmgr:Cpu Quantum’等待事件(即使你已经禁用了resource manager)造成数据库hang住的解决办法
- Redis常见的集群方案(转)
- React 实践项目 (一)
- 09/07/2017
- 归并排序算法心得
- POJ 3004 Subway planning 笔记
- Mysql学习历程基本语法(4)--数据操作
- Java8新增的DateTimeFormatter与SimpleDateFormat的区别
- Coprime Sequence HDU
- 机器学习性能评估指标资料汇总
- MySQL对查询结果排序
- 在win10下安装ubuntu(UEFI+GPT)的引导问题
- SSH Unit04