归并排序

it2023-10-27  71

以 下 实 现 的 归 并 排 序 的 空 间 复 杂 度 O ( n ) , 需 要 O ( n ) 的 辅 助 空 间 以下实现的归并排序的空间复杂度O(n),需要O(n)的辅助空间 O(n)O(n)

void Merge(T a[],int low,int mid,int high) //将有序序列a[low-mid],a[mid+1,high]归并到a[low,high]

自底向上的归并排序: void MerGesort(T a[],int n) { int t=1; while(t<n) { s=t;t=s*2; for(i=0;i+t<n;i+=t) Merge(a,i,i+s-1,i+t-1); if(i+s<n) Merge(a,i,i+s-1,i+t-1); } } 归并排序: void MerGesort(T a[],int low,int high) { if(low>=high) return; else { mid=(low+high)/2; MergeSort(a,low,mid); MergeSort(a,mid+1,high); Merge(a,low,mid,high); } }

递归的过程

void Merge(int sourceArr[],int 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[j++]; else tempArr[k++] = sourceArr[i++]; } 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]; }

T ( n ) = a T ( n b ) + f ( n ) T(n)=aT(\frac{n}{b})+f(n) T(n)=aT(bn)+f(n) 则 有 : { O ( n l o g b a ) O ( n l o g b a ) > O ( f ( n ) ) O ( f ( n ) l o g n ) O ( n l o g b a ) = O ( f ( n ) ) O ( f ( n ) ) O ( n l o g b a ) < O ( f ( n ) ) 则有:\begin{cases} O(n^{log_ba})& { O( n^{log_ba} )>O(f(n))}\\ O(f(n)logn)& { O( n^{log_ba} )=O(f(n))}\\ O(f(n))& { O( n^{log_ba} )<O(f(n))} \end{cases} O(nlogba)O(f(n)logn)O(f(n))O(nlogba)>O(f(n))O(nlogba)=O(f(n))O(nlogba)<O(f(n))

最新回复(0)