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 }
运行结果:
时间: 2024-10-14 13:00:45