C語言實現歸并排序算法代碼

w427 9年前發布 | 1K 次閱讀 C/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>

 本文由用戶 w427 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!