标签:
/输入给定数组和长度,进行排序。
/代码还没测试过,如果有朋友帮我找到了BUG,不胜感激。
1 #define Elmt int 2 3 void merge_sort(Elmt* sqc, int len) { 4 Elmt t; 5 Elmt *temp; 6 int i = 0, j = 0, k = 0; 7 8 if(len == 2) { 9 if(sqc[0] > sqc[1]) { 10 t = sqc[0]; 11 sqc[0] = sqc[1]; 12 sqc[1] = t; 13 } 14 } 15 else if(len > 2) { 16 merge_sort(sqc, len / 2);//len == len/2 + len/2 + len%2; 17 merge_sort(&sqc[len / 2], len / 2 + len % 2); 18 temp = (Elmt*)malloc(sizeof(Elmt)*len); 19 while(i != len / 2 || j != (len / 2 + len % 2)) {// 合并序列 20 if(i == len / 2) { 21 temp[k++] = sqc[len / 2 + j++]; 22 } 23 else if(j == (len / 2 + len % 2)) { 24 temp[k++] = sqc[i++]; 25 } 26 else { 27 if(sqc[len / 2 + j] < sqc[i]) { 28 temp[k++] = sqc[len / 2 + j++]; 29 } 30 else { 31 temp[k++] = sqc[i++]; 32 } 33 } 34 } 35 for(i = 0; i < len; ++i) { 36 sqc[i] = temp[i]; 37 } 38 free(temp); 39 } 40 }
标签:
原文地址:http://www.cnblogs.com/bread/p/4383500.html