c语言分治算法归并排序报告,C语言之归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

二、归并操作的工作原理如下:

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针超出序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

三、C语言程序代码

#include

int guibing(int *p,int *q,int left,int mid,int right);

int main(void)

{

int i;

int d[]={0};

int p[10]={2,4,6,8,0,1,3,5,7,9};

guibing(p,d,0,3,9);

for(i=0;i<10;i++)

{

printf("%d,",d[i]);

}

return 0;

}

//将两个排好序的序列归并到一个数组里

int guibing(int *p,int *q,int left,int mid,int right)//mid是第一个数组的最后一个下表 ,q是归并排列好的数组

{

int i,j,k;

i=left;

j=mid+1;

k=left;//k是排好序的第一个元素的下表

while(i<=mid&&j<=right)

{

if(p[i]

{

q[k]=p[i];

k++;

i++;

}

else

{

q[k]=p[j];

k++;

j++;

}

if(i>mid)

while(j<=right)

q[k++]=p[j++];

else if(i<=mid)

while(j>right)

q[k++]=p[i++];

}

}

你可能感兴趣的:(c语言分治算法归并排序报告)