归并排序递归思想
时间:2020-04-21
本文章向大家介绍归并排序递归思想,主要包括归并排序递归思想使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
归并排序基于递归的思想,递归将一个数组分别等量的两个数组,最后再根据大小顺序插入help数组中保证help数组是有序的,将数组赋值到原数组。此方法基于分而治之的思想。根据Master公式:
T [n] = aT[n/b] + f (n)(直接记为T [n] = aT[n/b] + T (N^d))
其中 a >= 1 and b > 1 是常量,其表示的意义是n表示问题的规模,a表示递归的次数也就是生成的子问题数,b表示每次递归是原来的1/b之一个规模,f(n)表示分解和合并所要花费的时间之和。
解法:
①当d<logb a时,时间复杂度为O(n^(logb a))
②当d=logb a时,时间复杂度为O((n^d)*logn)
③当d>logb a时,时间复杂度为O(n^d)
可以知道显然归并排序的时间复杂度是O(nlogn),格外空间O(n);
void Mergesort(int* &arr,int l,int r); void Merge(int* &arr,int l,int mid,int r); void MergeSort(int* &arr,int n) { if( arr == NULL|| n<=1 ) return ; Mergesort(arr,0,n-1); } void Mergesort(int* &arr,int l,int r) { if(l==r) return; //printArr(arr,r); // int mid= l + ((r-l) >> 1); int mid= (l + r)/2; Mergesort(arr,l,mid); Mergesort(arr,mid+1,r); Merge(arr,l,mid,r); } // 1 4 9 || 3 5 6 // l mid mid+1 void Merge(int* &arr,int l,int mid,int r) { int *help=(int *)malloc(sizeof(int)*(r-l+1)); int i=0; int p1=l; int p2=mid+1; while(p1<=mid && p2<=r) { help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++]; } while(p1<=mid) { help[i++] = arr[p1++]; } while(p2<=r) { help[i++] = arr[p2++]; } for(i=l;i<=r;i++) { arr[i]=help[i-l]; } }
原文地址:https://www.cnblogs.com/RainzzZ/p/12743810.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法