做网站找 汇搜网络,h5网站建设报价多少钱,wordpress wortd,有赞分销员的功能和规则前言#xff1a; 在今后的日子里#xff0c;我将持续更新博客#xff0c;讨论《算法导论》一书中的提到的各算法的C实现。初来乍到#xff0c;请多指教。 今日主题#xff1a; 今天讨论《算法导论》第二章算法基础中的归并排序算法。下面是该算法的代码Merge.h#x…前言 在今后的日子里我将持续更新博客讨论《算法导论》一书中的提到的各算法的C实现。初来乍到请多指教。 今日主题 今天讨论《算法导论》第二章算法基础中的归并排序算法。下面是该算法的代码Merge.h #include stdlib.hnamespace dksl
{/** 归并* numArray为整形数组* head为要归并的数组的开始位置索引* waist为要归并的数组的中间位置索引* tail-1为要归并的数组的结束位置索引*/void merge(int *numArray,const int head,const int waist,const int tail){int beginhead,startwaist,index0;int lengthtail-head;int* tempnew int[length]; if(tempnullptr)throw 系统为程序分配内存失败;while(beginwaiststarttail){if(numArray[begin]numArray[start])temp[index]numArray[begin];elsetemp[index]numArray[start];}if(beginwaist){while(starttail)temp[index]numArray[start];}else if(starttail){while(beginwaist)temp[index]numArray[begin];}//memcpy(numArrayhead, temp, sizeof(int)*length);int i0;for(i,indexhead;ilength;i,index){numArray[index]temp[i];}delete(temp);}void sort(int *numArray,const int head,const int tail){ int length tail - head; int begin head, middle ((headtail)%2 0) ? (headtail)/2 : (headtail1)/2, end tail; if(length 2) return; else if(length 2) merge(numArray,begin,middle,end); else { if( middle- begin 1) sort(numArray,begin,middle); if( end- middle 1) sort(numArray,middle,end); merge(numArray,begin,middle,end); }}
}c动态数组分配很方便“int* tempnew int[length]; ”length在程序运行过程中确定。为了养成良好的习惯请在定义的指针空间使用完后将其删除。 下面是本算法的测试代码MergeSort.cpp #include stdafx.h
#include iostream
#include Merge.husing namespace std;
using namespace dksl;
int _tmain(int argc, _TCHAR* argv[])
{int a[10] {1, 4, 8, 5, 10, 25, 54, 15, 12, 2}; int i 0; sort(a, 0, 10); coutThe sorted array is:; for(i 0; i 10; i) couta[i] ; coutendl;system(PAUSE);return 0;
}运行结果 转载于:https://www.cnblogs.com/DKSL/p/3145122.html