归并排序
1 /**
2 * 归并排序
3 * yaoC 2014-09-03
4 * Θ(nlg(n))
5 */
6
7 #include<iostream>
8 using namespace std;
9
10 #define infinity 999999//定义无穷大
11
12 /**
13 * [merge 合并]
14 * @param A [待合并数组,也是合并后的数组]
15 * @param p [数组第一部分开始下标]
16 * @param q [数组第一部分结束下标]
17 * @param r [数组第二部分结束下标]
18 */
19 void merge(int* A,int p,int q,int r)
20 {
21 //分为两个数组,增加最后一位值为无穷大
22 int n1=q-p+1;
23 int n2=r-q;
24 int* A1=new int[n1+1];
25 int* A2=new int[n2+1];
26 for (int i = 0; i < n1; i++)
27 A1[i]=A[p+i];
28 A1[n1]=infinity;
29 for (int i = 0; i < n2; i++)
30 A2[i]=A[q+1+i];
31 A2[n2]=infinity;
32 //合并
33 int i=0,j=0,k=p;
34 while(k<=r)
35 {
36 if(A1[i]<A2[j])
37 {
38 A[k]=A1[i];
39 i++;
40 }
41 else
42 {
43 A[k]=A2[j];
44 j++;
45 }
46 k++;
47 }
48 }
49 /**
50 * [mergeSort 分解]
51 * @param A [待排序数组]
52 * @param p [数组开始下标]
53 * @param r [数组结束下标]
54 */
55 void mergeSort(int* A,int p,int r)
56 {
57 int q=(p+r)/2;
58 //将数组一分为二
59 if(p<q)
60 {
61 mergeSort(A,p,q);
62 mergeSort(A,q+1,r);
63 }
64 merge(A,p,q,r);//合并两个数组
65 }
66 //test
67 int main()
68 {
69 int num = 0;
70 cout << "个数:";
71 cin >> num;
72 int* p = new int[num];
73 cout << "数值:";
74 for (int i = 0; i < num; i++)
75 cin >> p[i];
76 mergeSort(p,0,num-1);
77 cout << "after sorting:";
78 for (int i = 0; i < num; i++)
79 cout << p[i] << " ";
80 cout << endl;
81 }
2 * 归并排序
3 * yaoC 2014-09-03
4 * Θ(nlg(n))
5 */
6
7 #include<iostream>
8 using namespace std;
9
10 #define infinity 999999//定义无穷大
11
12 /**
13 * [merge 合并]
14 * @param A [待合并数组,也是合并后的数组]
15 * @param p [数组第一部分开始下标]
16 * @param q [数组第一部分结束下标]
17 * @param r [数组第二部分结束下标]
18 */
19 void merge(int* A,int p,int q,int r)
20 {
21 //分为两个数组,增加最后一位值为无穷大
22 int n1=q-p+1;
23 int n2=r-q;
24 int* A1=new int[n1+1];
25 int* A2=new int[n2+1];
26 for (int i = 0; i < n1; i++)
27 A1[i]=A[p+i];
28 A1[n1]=infinity;
29 for (int i = 0; i < n2; i++)
30 A2[i]=A[q+1+i];
31 A2[n2]=infinity;
32 //合并
33 int i=0,j=0,k=p;
34 while(k<=r)
35 {
36 if(A1[i]<A2[j])
37 {
38 A[k]=A1[i];
39 i++;
40 }
41 else
42 {
43 A[k]=A2[j];
44 j++;
45 }
46 k++;
47 }
48 }
49 /**
50 * [mergeSort 分解]
51 * @param A [待排序数组]
52 * @param p [数组开始下标]
53 * @param r [数组结束下标]
54 */
55 void mergeSort(int* A,int p,int r)
56 {
57 int q=(p+r)/2;
58 //将数组一分为二
59 if(p<q)
60 {
61 mergeSort(A,p,q);
62 mergeSort(A,q+1,r);
63 }
64 merge(A,p,q,r);//合并两个数组
65 }
66 //test
67 int main()
68 {
69 int num = 0;
70 cout << "个数:";
71 cin >> num;
72 int* p = new int[num];
73 cout << "数值:";
74 for (int i = 0; i < num; i++)
75 cin >> p[i];
76 mergeSort(p,0,num-1);
77 cout << "after sorting:";
78 for (int i = 0; i < num; i++)
79 cout << p[i] << " ";
80 cout << endl;
81 }

浙公网安备 33010602011771号