Merge Sort [Basic] C程序 实现排序功能

来源:互联网 发布:选创维网络电视 编辑:程序博客网 时间:2024/05/16 08:48
#include<stdio.h>const char FILENAME[] = "to be sorted.txt";#include<stdlib.h>#include<time.h>void create_input(FILE*fp,short N){short i;srand(time(NULL));for (i=0;i<N;i++)fprintf(fp,"%d\n",rand());}void Merge(short*A, short p, short q, short r){short n1,n2,*L,*R,i,j,k;n1 = q-p+1;n2 = r-q;L = (short*)calloc(n1+1,sizeof(L));R = (short*)calloc(n2+1,sizeof(R));for (i=0; i<n1; i++)L[i]=A[p+i];L[n1]=32767;for (j=0; j<n2; j++)R[j]=A[q+1+j];R[n2]=32767;i=0;j=0;for (k=p; k<=r; k++){if (L[i]<=R[j])A[k]=L[i++];elseA[k]=R[j++];}free(L);free(R);}void MergeSort(short*A, short p, short r){short q=(p+r)/2;if (p<r){MergeSort(A,p,q);MergeSort(A,q+1,r);Merge(A,p,q,r);}}void main(){FILE*fp;short N=80,*A;short j=0;char line[10];fp = fopen(FILENAME,"w");create_input(fp,N);fclose(fp);fp = fopen(FILENAME,"r");A = (short*)calloc(N,sizeof(short));while (fgets(line,10,fp))A[j++]=atoi(line);printf("To be sorted:\n");for (j=0;j<N;j++)printf("%d%c",A[j],(j==(N-1))?'\n':'\t');MergeSort(A,0,N-1);printf("After sorting:\n");for (j=0;j<N;j++)printf("%d%c",A[j],(j==(N-1))?'\n':'\t');}

原创粉丝点击