归并排序算法

#include <stdio.h>
 void merge(int is1[],int left,int last,int mid)
 {	
    int i=left,j=mid+1,k=left,is2[1000];
	while(i<=mid&&j<=last)
	if(is1[i]<=is1[j]) // 此处为排序顺序的关键,用小于表示从小到大排序。实际上就是把is1分成两个数组,第一从left到mid,第二个从mid+1到last,把这两个数组合成一个数组即可

	is2[k++]=is1[i++];
	else
	is2[k++]=is1[j++];
	while(i<=mid)
	is2[k++]=is1[i++];
	while(j<=last)
	is2[k++]=is1[j++];
	for(i=left;i<=last;i++)// 写回原数组
	is1[i]=is2[i];
}





 void merge_sort(int number[],int first,int last)
 {
     int mid=0;
     if(first<last)
     {
     mid=(first+last)/2;
     merge_sort(number,first,mid);//划分左半部分
     merge_sort(number,mid+1,last);//划分右半部分
     merge(number,first,last,mid);//合并
     }
 }




 int main()
 {
     int number[]={1,3,4,2,6,7,4,5,9,8,44},n=11,i;
     
     merge_sort(number,0,n-1);
     for(i=0;i<n;i++)
     printf("%d ",number[i]);
    
     return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值