algorithm - 如何找出合并排序实现的时间复杂度?

标签 algorithm big-o time-complexity

我们都知道合并排序算法的时间复杂度是“N Log N”。但是从下面的代码如何逐步计算这个“N Log N”大O符号?互联网上有一些关于这个问题的答案,但它们很难理解。请帮助我理解。万分感谢。

#include<stdio.h>
#define MAX 50

void mergeSort(int arr[],int low,int mid,int high);
void partition(int arr[],int low,int high);

int main(){

    int merge[MAX],i,n;

    printf("Enter the total number of elements: ");
    scanf("%d",&n);

    printf("Enter the elements which to be sort: ");
    for(i=0;i<n;i++){
         scanf("%d",&merge[i]);
    }

    partition(merge,0,n-1);

    printf("After merge sorting elements are: ");
    for(i=0;i<n;i++){
         printf("%d ",merge[i]);
    }

   return 0;
}

void partition(int arr[],int low,int high){

    int mid;

    if(low<high){
         mid=(low+high)/2;
         partition(arr,low,mid);
         partition(arr,mid+1,high);
         mergeSort(arr,low,mid,high);
    }
}

void mergeSort(int arr[],int low,int mid,int high){

    int i,m,k,l,temp[MAX];

    l=low;
    i=low;
    m=mid+1;

    while((l<=mid)&&(m<=high)){

         if(arr[l]<=arr[m]){
             temp[i]=arr[l];
             l++;
         }
         else{
             temp[i]=arr[m];
             m++;
         }
         i++;
    }

    if(l>mid){
         for(k=m;k<=high;k++){
             temp[i]=arr[k];
             i++;
         }
    }
    else{
         for(k=l;k<=mid;k++){
             temp[i]=arr[k];
             i++;
         }
    }

    for(k=low;k<=high;k++){
         arr[k]=temp[k];
    }
}

我在这个地址找到了这段源码:

http://www.cquestions.com/2011/07/merge-sort-program-in-c.html

最佳答案

Time Complexity of Merge Sort

如果您知道如何获得归并排序的递归关系,那么对于时间复杂度,上面的解释就足够了。

关于algorithm - 如何找出合并排序实现的时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577682/

相关文章:

algorithm - k表示使用现有信息进行分割

c++ - 二叉树之字形层次顺序遍历算法的紧时间复杂度是多少?

java - 通过分析代码建立总结?

algorithm - 遍历所有节点的迭代加长伪代码

algorithm - 它可以在线性时间内解决吗,在 n^2 时间内完成

c - 这段代码的 Big-O 是什么?

algorithm - Big-O 表示法和多项式?

data-structures - 如何计算递归函数的时间复杂度?

java - 为什么 java 从具有大尺寸数字的第一个维度开始初始化二维数组需要很长时间?

algorithm - 使用 HeapSort 对 250 万个数字进行排序需要多长时间?