归并排序算法心得

来源:互联网 发布: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++数据抽象与问题求解(第六版)






原创粉丝点击