如何使用fork进程实现合并排序?

时间:2017-05-21 08:33:59

标签: c fork

使用fork进程,我想实现合并排序。我想分割和征服数组中的数据排序:我想将每一半分成一个子进程,然后通过让父进程合并这些部分来征服。

以下代码仅适用于两个数字,对于三个或更多数字,数组不会更改。为什么呢?

void sort(int low, int high, int a[100], int b[100]) {
    int mid;
    pid_t pid1, pid2;   
    if(low < high) {
        mid = (low + high) / 2;

        pid1=fork();
        if (pid1<0) exit(0); 
        if (pid1==0) {              //first child process
            sort(low, mid,a,b);     //first half
            exit(0);
        }
        else wait(NULL);

        pid2=fork();
        if (pid2<0) exit(0);
        if (pid2==0){               //second child process
            sort(mid+1, high,a,b);  //second half
            exit(0);
        }
        else wait(NULL);

        if (pid1>0 && pid2>0)
        {
            merging(low, mid, high,a, b);

        } 
    }

}

1 个答案:

答案 0 :(得分:1)

正如已经指出的那样,分叉进程既不能看到也不会改变彼此的内存空间。

你有(至少)三个选择: