权重查询爱站网wordpress美化登录界面
权重查询爱站网,wordpress美化登录界面,论坛网站制作费用,网站开发职业工资文章目录 算法步骤递归实现代码优缺点分析优点缺点 适用场景迭代法 vs 递归法学习视频推荐 归并排序#xff08;Merge Sort#xff09;是经典的分治算法#xff0c;采用递归合并的思路实现高效排序。其核心思想是将数组不断二分至最小单元#xff08;单个元素#xff09;int n1mid - left 1;int n2right - mid;// 创建临时数组 int *L(int*)malloc(n1 * sizeof(int));int *R(int*)malloc(n2 * sizeof(int));// 复制数据到临时数组for(i0;in1;i)L[i]arr[left i];for(j0;jn2;j)R[j]arr[mid 1 j];// 合并临时数组到原数组 i0;j0;kleft;while(in1jn2){if(L[i]R[j]){arr[k]L[i];i;}else{arr[k]R[j];j;}k;}// 复制剩余元素while(in1){arr[k]L[i];i;k;}while(jn2){arr[k]R[j];j;k;}free(L);free(R);}// 归并排序递归函数 void mergeSort(int arr[], int left, int right){if(leftright){int midleft (right - left)/2;// 递归排序左右子数组 mergeSort(arr, left, mid);mergeSort(arr, mid 1, right);// 合并已排序的子数组 merge(arr, left, mid, right);}}// 测试用例 intmain(){int arr[]{12,11,13,5,6,7};int nsizeof(arr)/ sizeof(arr[0]);printf(原始数组: );for(int i0;in;i)printf(%d , arr[i]);mergeSort(arr,0, n -1);printf(\n排序后数组: );for(int i0;in;i)printf(%d , arr[i]);return0;}代码实现2摘抄自菜鸟教程#includestdio.h#includestdlib.h#includestring.h// 函数声明voidmerge_sort_recursive(intarr[],intreg[],intstart,intend);voidmerge_sort(intarr[],constintlen);intmain(){intarr[]{22,34,3,32,82,55,89,50,37,5,64,35,9,70};intlensizeof(arr)/sizeof(arr[0]);// 计算数组长度merge_sort(arr,len);// 调用归并排序函数// 打印排序后的数组for(inti0;ilen;i){printf(%d ,arr[i]);}return0;}// 递归实现归并排序voidmerge_sort_recursive(intarr[],intreg[],intstart,intend){if(startend)return;intmidstart(end-start)/2;intstart1start,end1mid;intstart2mid1,end2end;merge_sort_recursive(arr,reg,start1,end1);merge_sort_recursive(arr,reg,start2,end2);intkstart;while(start1end1start2end2){reg[k]arr[start1]arr[start2]?arr[start1]:arr[start2];}while(start1end1){reg[k]arr[start1];}while(start2end2){reg[k]arr[start2];}// 使用memcpy进行数组复制提高效率memcpy(arrstart,regstart,(end-start1)*sizeof(int));}// 归并排序入口函数voidmerge_sort(intarr[],constintlen){int*reg(int*)malloc(len*sizeof(int));if(regNULL){// 检查内存分配是否成功fprintf(stderr,Memory allocation failed\n);exit(EXIT_FAILURE);}merge_sort_recursive(arr,reg,0,len-1);free(reg);// 释放内存}优缺点分析优点1、时间复杂度稳定在O(n log n)2、适合链表排序不需要额外空间3、多线程环境下容易并行化缺点1、需要O(n)额外空间2、递归调用有栈空间开销3、小规模数组时常数因子较大适用场景1、数据量较大通常n10002、需要稳定排序的场景3、外部排序磁盘数据排序4、链表排序实现迭代法 vs 递归法特性迭代法递归法实现方式通过循环逐步合并子数组通过递归分解问题空间开销仅需临时数组空间递归栈空间可能栈溢出代码复杂度稍复杂需手动管理边界更简洁分治逻辑直观学习视频推荐数据结构合集 - 归并排序(非递归与递归算法过程, 效率分析, 稳定性分析)