C語言實現歸并排序算法代碼
// Mix two sorted tables in one and split the result into these two tables. int Mix(int tab1,int tab2,int count1,int count2) { int i,i1,i2; i = i1 = i2 = 0; int temp = (int )malloc(sizeof(int)(count1+count2));while((i1<count1) && (i2<count2)) { while((i1<count1) && ((tab1+i1)<=(tab2+i2))) { (temp+i++) = (tab1+i1); i1++; } if (i1<count1) { while((i2<count2) && ((tab2+i2)<=(tab1+i1))) { (temp+i++) = (tab2+i2); i2++; } } }
memcpy(temp+i,tab1+i1,(count1-i1)sizeof(int)); memcpy(tab1,temp,count1sizeof(int));
memcpy(temp+i,tab2+i2,(count2-i2)sizeof(int)); memcpy(tab2,temp+count1,count2sizeof(int)); // These two lines can be: // memcpy(tab2,temp+count1,i2*sizeof(int)); free(temp); }
// MergeSort a table of integer of size count. // Never tested. void MergeSort(int *tab,int count) { if (count==1) return;
MergeSort(tab,count/2); MergeSort(tab+count/2,(count+1)/2); Mix(tab,tab+count/2,count/2,(count+1)/2); } </pre>