合并排序算法中递归分区函数的用途是什么?

时间:2014-01-02 18:22:35

标签: c

#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);   // how it works 
         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];
    }
}

递归partition函数如何在上述程序中起作用?

2 个答案:

答案 0 :(得分:1)

MergeSort的递归部分是partition函数。

来自Wikipedia

  

递归(计算机科学),一种程序或子程序,用编程语言实现,其实现参照自己

MergeSort可以分为两个步骤:

  1. 将未排序的列表分为 n 子列表,每个子列表包含1个元素。
  2. 重复合并子列表以生成新的已排序子列表,直到只剩下1个子列表。
  3. 您的具体问题涉及Partition功能:

    基本上,分区是分而治之算法的除法部分。 征服部分是递归调用。最后,组合步骤是合并分区的步骤。

答案 1 :(得分:0)

Mergesort使用分而治之的方法。这是visual representation