资讯详情

资讯详情

【算法导论】归并排序的代码实现(加上算法运算时间)

第二个排序算法啦主要就是按照书上伪代码进行C的实现这里LZ加了一小段计时程序虽然这个排序事例比较简单但是如果这个排序函数在一个大型程序中需要调用成千上万次那么一毫秒也会相当重要。在算法中或者在实际应用中时间复杂度和空间复杂度是通常项目实施中会遇到的两大难题所以应该从刚开始编程开始就要把一些时间的损耗考虑进来养成良好的习惯对今后会有很大的帮助。#include iostream #include ctime using namespace std; void MergeSort1(int *a, int p, int r); void Merge(int *a, int p, int q, int r); template class T int getArrayLen(T array) {//使用模板定义一 个函数getArrayLen,该函数将返回数组array的长度 return (sizeof(array) / sizeof(array[0])); } int main() { int array[6] {31,41,59, 26, 41, 58}; for (int i 0; i getArrayLen(array); i) { cout the i th element is array[i] endl; } int i getArrayLen(array); //这里添加了一个计时的小代码 clock_t start,finish; double totaltime; startclock(); //归并排序的调用 MergeSort1(array, 0, i); finishclock(); totaltime(double)(finish-start)/CLOCKS_PER_SEC; cout\n此程序的运行时间为totaltime秒endl; cout after the merge-sort endl; for (int i 0; i getArrayLen(array); i) { cout the i th element is array[i] endl; } return 0; } //按照书上伪代码进行编写 void Merge(int *a, int p, int q, int r) { int n1 q-p1; int n2 r-q; //使用new来分配内存 int *L new int[n11]; int *R new int[n21]; int i, j, k; for (i0; in1; i){ L[i] a[pi]; } for (j0; jn2; j){ R[j] a[qj1]; } L[n1] 10000000; R[n2] 10000000; for (i0, j0, kp; kr; k) { if (L[i]R[j]) { a[k] L[i]; i; }else{ a[k] R[j]; j; } } //使用delete释放内存delete只能释放new分配的内存 delete []L; delete []R; } void MergeSort1(int *a, int p, int r) { if (pr) { int q (pr)/2; MergeSort1(a, p, q); MergeSort1(a, q1, r); Merge(a, p, q, r); } }程序都是调试过的可以直接运行哦(⊙o⊙)哦
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →