1
1
/*
2
- 归并算法
3
- 参考;http://zh.wikipedia.org/zh/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
4
- 算法逻辑:
5
- 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
6
- 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置
7
- 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
8
- 4.重复步骤3直到某一指针达到序列尾
9
- 5.将另一序列剩下的所有元素直接复制到合并序列尾
2
+ 归并算法
3
+ 参考;http://zh.wikipedia.org/zh/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
4
+ 算法逻辑:
5
+ 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
6
+ 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置
7
+ 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
8
+ 4.重复步骤3直到某一指针达到序列尾
9
+ 5.将另一序列剩下的所有元素直接复制到合并序列尾
10
10
*/
11
- // #只完成兩段之間歸併的功能#%
11
+ // #只完成兩段之間歸併的功能#%
12
12
#include < iostream>
13
13
using namespace std ;
14
14
void Merge (int a[], int b[], int low, int mid, int high)
@@ -36,16 +36,16 @@ void Merge(int a[], int b[], int low, int mid, int high)
36
36
void MergePass (int a[], int b[], int seg, int size)
37
37
{
38
38
int seg_start_ind = 0 ;
39
- while (seg_start_ind <= size - 2 * seg) // #size - 2 * seg的意思是滿足可兩兩歸併的最低臨界值#%
39
+ while (seg_start_ind <= size - 2 * seg) // #size - 2 * seg的意思是滿足可兩兩歸併的最低臨界值#%
40
40
{
41
41
Merge (a, b, seg_start_ind, seg_start_ind + seg - 1 , seg_start_ind + seg * 2 - 1 );
42
42
seg_start_ind += 2 * seg;
43
43
}
44
- // #如果一段是正好可歸併的數量而另一段則少於正好可歸併的數量#%
44
+ // #如果一段是正好可歸併的數量而另一段則少於正好可歸併的數量#%
45
45
if (seg_start_ind + seg < size)
46
46
Merge (a, b, seg_start_ind, seg_start_ind + seg - 1 , size - 1 );
47
47
else
48
- for (int j = seg_start_ind; j < size; j++) // #如果只剩下一段或者更少的數量#%
48
+ for (int j = seg_start_ind; j < size; j++) // #如果只剩下一段或者更少的數量#%
49
49
b[j] = a[j];
50
50
}
51
51
@@ -66,11 +66,10 @@ int main()
66
66
{
67
67
int a[] = {3 , 5 , 3 , 6 , 4 , 7 , 5 , 7 , 4 }; // #QQ#%
68
68
MergeSort (a, sizeof (a) / sizeof (*a));
69
- // #輸出#%
69
+ // #輸出#%
70
70
for (int i = 0 ; i < sizeof (a) / sizeof (*a); i++)
71
71
cout << a[i] << ' ' ;
72
72
cout << endl;
73
73
74
74
return 0 ;
75
- }
76
-
75
+ }
0 commit comments