归并排序算法C++实现
归并排序算法是几种排序算法里面时间性能较好的了为O(nlogn)
归并排序时分治法的一个典型应用,它先将要排序的序列分成两分,分别对每一份用归并排序尽心排序,然后在将两份合并在一起,形成一个有序 的序序列。
code
1 #include <iostream>
2 usingnamespace std;
3
4#define MAX 10
5#define INFINITE 0xFFFFF
6 void Merg(int A[], int p, int q, int r)
7 {
8 int R1[MAX], R2[MAX];
9 int n = r-p;
10 int i,j;
11 for (i=p; i<q+1; i++)
12 {
13 R1[i-p] = A[i];
14 }
15 R1[q-p+1] = INFINITE;
16 for (j=q+1; j<r+1; j++)
17 {
18 R2[j-q-1] = A[j];
19 }
20 R2[r-q] = INFINITE;
21 i =0;
22 j =0;
23 int k;
24 for(k=p; k<r+1; k++)
25 {
26 if(R1[i] > R2[j]){
27 A[k] = R2[j++];
28 }
29 else{
30 A[k] = R1[i++];
31 }
32 }
33 }
34 void merg_sort(int A[], int p, int q)
35 {
36 if(q-p>0){
37 merg_sort(A, p, (q+p)/2); //对前部分进行归并排序
38 merg_sort(A, (q+p)/2+1, q); //对后部分进行归并排序
39 Merg(A, p, (q+p)/2, q); //将两部分合并
40 }
41 }
42
43 int main()
44 {
45 int A[MAX] = {78,14,13,52,55,98,96,64,35,80};
46 merg_sort(A, 0,MAX-1);
47 for(int i=0; i<MAX; i++)
48 {
49 cout << A[i] <<"";
50 }
51 cout << endl;
52 return0;
53 }
2 usingnamespace std;
3
4#define MAX 10
5#define INFINITE 0xFFFFF
6 void Merg(int A[], int p, int q, int r)
7 {
8 int R1[MAX], R2[MAX];
9 int n = r-p;
10 int i,j;
11 for (i=p; i<q+1; i++)
12 {
13 R1[i-p] = A[i];
14 }
15 R1[q-p+1] = INFINITE;
16 for (j=q+1; j<r+1; j++)
17 {
18 R2[j-q-1] = A[j];
19 }
20 R2[r-q] = INFINITE;
21 i =0;
22 j =0;
23 int k;
24 for(k=p; k<r+1; k++)
25 {
26 if(R1[i] > R2[j]){
27 A[k] = R2[j++];
28 }
29 else{
30 A[k] = R1[i++];
31 }
32 }
33 }
34 void merg_sort(int A[], int p, int q)
35 {
36 if(q-p>0){
37 merg_sort(A, p, (q+p)/2); //对前部分进行归并排序
38 merg_sort(A, (q+p)/2+1, q); //对后部分进行归并排序
39 Merg(A, p, (q+p)/2, q); //将两部分合并
40 }
41 }
42
43 int main()
44 {
45 int A[MAX] = {78,14,13,52,55,98,96,64,35,80};
46 merg_sort(A, 0,MAX-1);
47 for(int i=0; i<MAX; i++)
48 {
49 cout << A[i] <<"";
50 }
51 cout << endl;
52 return0;
53 }