c/c++之模板方法实现归并排序
2015-11-10 17:33
537 查看
#include <cstdio> #include <cstring> #include <cstdlib> template <class T> void Merge(T sourceArr[],T tempArr[],int startIndex,int midIndex,int endIndex){ int i = startIndex,j=midIndex+1,k = startIndex; while(i!=midIndex+1 && j!=endIndex+1){ if(sourceArr[i]>sourceArr[j]) tempArr[k++] = sourceArr[i++]; else tempArr[k++] = sourceArr[j++]; } while(i!=midIndex+1) tempArr[k++] = sourceArr[i++]; while(j!=endIndex+1) tempArr[k++] = sourceArr[j++]; for(i=startIndex;i<=endIndex;i++) sourceArr[i] = tempArr[i]; return ; } //内部使用递归 template <class T> void MergeSort(T sourceArr[],T tempArr[],int startIndex,int endIndex){ int midIndex; if(startIndex<endIndex){ midIndex=(startIndex+endIndex)/2; MergeSort(sourceArr,tempArr,startIndex,midIndex); MergeSort(sourceArr,tempArr,midIndex+1,endIndex); Merge(sourceArr,tempArr,startIndex,midIndex,endIndex); } return ; } #define LEN(arr) sizeof(arr)/sizeof(arr[0]) template <class T> void Reverse(T a[],int len,T* &b) { int count=len; while(len--) { b[len]=a[count-len-1]; }; } template <class T> void printArray(T a[],int len) { int i=0; for(i=0;i<len;i++) printf("%d ",a[i]); printf("\n"); } //c/c++之模板方法实现归并排序 int main(int argc,char * argv[]){ //int a[]={50,10,20,30,70,40,80,60}; int count=0; scanf("%d",&count); while(count--) { int len; scanf("%d",&len); int *a=new int[len]; for(int i=0;i<len;i++) { scanf("%d",&a[i]); } int *b=(int*)malloc(sizeof(int)*len); memset(b,0,len); MergeSort(a,b,0,len); printArray(a,len); Reverse(a,len,b); printArray(b,len); } return 0; }
相关文章推荐
- 黑马程序员--C语言基础--基本运算
- c++程序的内存格局
- C++笔记(二)------ 头文件
- 浅谈C++多态性
- C/C++ 中的0长数组(柔性数组)
- C++ enum
- c语言中float、double的区别和用string定义字符串反置
- Eclipse配置c/c++编程环境,完整教程+附样例
- 0生1,1生C,C生万物
- 黑马程序员——C语言基础02—数据类型
- C++面试题与答案
- C++ ASCII 码的一些问题
- C++静态库与动态库
- C语言中的函数调用,栈的使用
- C语言中的结构体
- C++ typedef
- C语言学习之路——switch case
- c语言实现小游戏_三子棋
- c++(排序二叉树线索化)
- C++ reference