归并排序

来源:互联网 发布:淘宝充值平台官网登录 编辑:程序博客网 时间:2024/06/05 19:01
#include<stdio.h>void merge(int source[],int temp[],int start,int mid ,int end){int i,k,j; i=start;k=start;j=mid+1;while(i!= mid+1 &&  j!=end+1){if(source[i]>source[j])temp[k++]=source[i++];                     //先使用后加;else temp[k++]=source[j++];}while(i!=mid+1)                          //i不到mid+1,  j到end+1;{temp[k++]=source[i++];}while (j!=end+1){temp[k++]=source[j++];}for(i=start;i<=end;i++)          //别忘记等号,因为是下标,所以应到对应的下表下;source[i]=temp[i];}void mergesort(int source [],int temp[],int start,int end)       //start end ,mid 都是数组的下标{int mid;if(start<end){mid=(start+end)/2;mergesort(source,temp,start,mid);mergesort(source,temp,mid+1,end);                        //先回溯在进行划分    merge(source,temp,start,mid,end);                         //进行归并}}int  main(){int n,i;int temp[100],source[100];printf("输入数值个数:");scanf("%d",&n);printf("输入数值:");for(i=0;i<n;i++)scanf("%d",&source[i]);mergesort(source,temp,0,n-1);                              //是n-1  因为是下标printf("排序后的数组:\n");for(i=0;i<n;i++)printf("%d\t",source[i]);putchar('\n');return 0;}

0 0
原创粉丝点击