whoami
zhu_xianfeng
全部博文(38)
J2SE(9)
J2EE(1)
2011年(1)
2008年(12)
2007年(25)
成都男孩
wyq1986a
shengcha
15295524
helloboy
linux_pl
quanster
cokeboL
jiyin56
分类: C/C++
2008-11-05 12:16:39
/********************************************* * Author: zhuxianfeng * Time: Wed 05 Nov 2008 10:38:53 AM CST * Filename: mergesort.h * Description: *********************************************/ #ifndef MERGESORT_H #define MERGESORT_H /** * 归并排序,memerge sort * 时间复杂度为O(nlgn) */ template<class T> void mergesort(T array[], const int first, const int last); /** * 对已经排好序的两个子数组进行排序 */ template<class T> void merge(T array[], const int first, const int last); #endif
/********************************************* * Author: zhuxianfeng * Time: Wed 05 Nov 2008 10:43:52 AM CST * Filename: mergesort.cpp * Description: *********************************************/ #include "mergesort.h" /** * 归并排序,memerge sort * 时间复杂度为O(nlgn) */ template<class T> void mergesort(T array[], const int first, const int last) { if (first < last) { int mid = (first + last) / 2; mergesort(array, first, mid); mergesort(array, mid + 1, last); merge(array, first, last); } } /** * 对已经排好序的两个子数组进行排序 */ template<class T> void merge(T array[], const int first, const int last) { const int mid = (first + last) / 2; const int length = last - first + 1; T data[length]; int i = first; int j = mid + 1; int index = 0; while (i <= mid && j <= last) { if (array[i] < array[j]) { data[index++] = array[i++]; } else { data[index++] = array[j++]; } } //接下来这两个循环只会进入一个 while (i <= mid) { data[index++] = array[i++]; } while (j <= last) { data[index++] = array[j++]; } //复制数组 for (index=0; index<length; index++) { array[first + index] = data[index]; } }
上一篇:一道有关多态的题目
下一篇:判断树是否平衡,是否完全平衡
登录 注册