您的位置:首页 > 理论基础 > 数据结构算法

并归排序 c语言数据结构

2012-07-16 16:29 155 查看
#include <stdio.h>

#include <stdlib.h>

#define N 10

void merge(int *a1,int a1_start,int *a2,int a2_start,

int a2_end,int *a3,int a3_start,int a3_end);

void merge_sort(int *a,int left,int right);

/*

函数功能:两个数组合并成一个数组;

函数原型:void merge(int *a1,int a1_start,int a1_end,int *a2,int a2_start,

int a2_end,int *a3,int a3_start,int a3_end)

函数参数:

函数返回值:void

*/

void merge(int *a1,int a1_start,int *a2,int a2_start,

int a2_end,int *a3,int a3_start,int a3_end)

{

int i,j,h,k=0;

int b
;

i=a2_start;

j=a3_start;

while(i<=a2_end&&j<=a3_end)

{

if(a2[i]<=a3[j])

{

b[k++]=a2[i++];

}

else

{

b[k++]=a3[j++];

}

}

while(i<=a2_end)

{

b[k++]=a2[i++];

}

while(j<=a3_end)

{

b[k++]=a3[j++];

}

for(h=0;h<k;h++)

{

a1[a1_start+h]=b[h];

}

}

/*

函数功能:使用归并排序法进行排序:从小到大;

函数原型:void merge_sort(int *a,int left,int right)

函数参数:int *a:数组名

int left:排序数组的开始下标

int right:排序数组的结束下标

函数返回值:void

*/

void merge_sort(int *a,int left,int right)

{

int half;

if(left<right)

{

half=(int)((left+right)/2);

merge_sort(a,left,half);

merge_sort(a,half+1,right);

merge(a,left,a,left,half,a,half+1,right);

}

}

/*main 函数*/

int a
={12,78,895,24,158,369,58,621,1475,2};

int main()

{

int i;

printf("排序前数组序列:/n");

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

{

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

}

printf("/n排序前数组序列:/n");

merge_sort(a,0,N-1);

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

{

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: