首页 > 代码库 > 归并排序(分治)
归并排序(分治)
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void MerageSort(int *A, int low, int high); 5 void Merge(int *A, int low, int middle, int high); 6 7 int main() 8 { 9 10 int array[] = {2, 3, 6, 5, 4, 3, 3}; 11 int low = 0, high = 7; 12 13 int i = 0; 14 for(i = low; i < high; i++) 15 { 16 printf("%d ", array[i]); 17 } 18 printf("\n"); 19 20 MerageSort(array, low, high - 1); 21 22 23 system("pause"); 24 return 0; 25 } 26 27 void Merge(int *A, int low, int middle, int high) 28 { 29 int i = low, j = middle + 1; 30 int m = middle, n = high; 31 int k = 0; 32 int *A1 = (int*)malloc((high - low + 1)*sizeof(int)); 33 printf("low = %d, middle = %d, high = %d\n", low, middle, high); 34 35 while(i <= m && j <= n) 36 { 37 if(A[i] < A[j]) 38 { 39 A1[k] = A[i]; 40 i++; 41 } 42 else 43 { 44 A1[k] = A[j]; 45 j++; 46 } 47 k++; 48 } 49 50 while(i <= m) //加到尾部 51 { 52 A1[k] = A[i]; 53 k++; 54 i++; 55 } 56 57 while(j <= n) //加到尾部 58 { 59 A1[k] = A[j]; 60 k++; 61 j++; 62 } 63 64 for(i = 0; i < high -low + 1; i++) 65 { 66 A[low + i] = A1[i]; 67 printf("%d ", A[low + i]); 68 } 69 printf("\n"); 70 71 free(A1); 72 A1 = NULL; 73 } 74 75 76 void MerageSort(int *A, int low, int high) 77 { 78 int middle = 0; 79 if(low < high) 80 { 81 middle = (low + high)/2; 82 MerageSort(A, low, middle); 83 MerageSort(A, middle+1, high); 84 Merge(A, low, middle, high); 85 86 } 87 }
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。