C++[第5章]重要演算法的實作
C++[第5章]重要演算法的實作
C++
5-1
1. N N-1 N-1
2.
3.
5-1
5-10
CHAPTER 05
̹̹實例演練
5data
Step 01
swapdatax y
Step 02
one_bubble
Step 03
print_array
Step 04
54
89
1 int main(){
2 int data[5] = {4, 1, 3, 5, 2};
3 int data_count = sizeof(data) / sizeof(int); // = = 5
4 for(int i = 0; i < data_count - 1; i++){ // 54
5 one_bubble(data, data_count-1-i); // i
TIP
int data_count = sizeof(data) / sizeof(int);
sizeof(data) / sizeof(int)data
Step 05
程式碼
1 /*
2 Ch5-1-bubbleSort.cpp
3 ( )
4 : swap, one_bubble, print_array
5 : 1.0
6 */
7
8 #include <iostream>
9
10 using namespace std;
11
12 // ----- swap: datax, y -----
13 void swap(int data[], int x, int y){
14 int temp = data[x];
15 data[x] = data[y];
16 data[y] = temp;
17 }
90
CHAPTER 05
18
19 // ----- one_bubble: -----
20 void one_bubble int data[], int end_index){
(
21 for(int j = 0; j < end_index; j++){ // end_index ( )
42 one_bubble(data, data_count-1-i); // i
43 cout << " " << i << ": "; //
44 print_array(data, data_count);
45 }
46 cout << "" << endl;
47 // ===== =====
48 return 0;
49 }
執行結果
0: 1 3 4 2 5
1: 1 3 2 4 5
2: 1 2 3 4 5
3: 1 2 3 4 5
91
5-1
5-1
5-1
one_bubble
j=0 4 1 3 5 2
j=1 1 4 3 5 2
i=0 i=0
j=2 1 3 4 5 2
5
j=3 1 3 4 5 2
0 1 3 4 2 5
j=0 1 3 4 2 5
i=1 i=1
j=1 1 3 4 2 5
4 2
j=2 1 3 4 2 5
1 1 3 2 4 5
j=0 1 3 2 4 5 i=2
i=2
j=1 1 3 2 4 5 3 3
2 1 2 3 4 5
i=3 j=0 1 2 3 4 5 i=3
2 4
3 1 2 3 4 5
5-2
92
CHAPTER 05
̹̹實例演練
data
target
Step 01 seq_search
datatarget-1
Step 02
Step 03
1 if(found_index == -1){
2 cout << "" << target << endl;
3 }
4 else{
5 cout << "" << target << ", " << found_index <<
"" << endl;
6 }
Step 04
93
程式碼
1 /*
2 Ch5-2-seqSearch.cpp
3
4 : seq_search
5 : 1.0
6 */
7
8 #include <iostream>
9
10 using namespace std;
11
12 // ----- seq_search:
datatarget-1 -----
13 int seq_search(int data[], int data_count, int target){
14 for(int i = 0; i < data_count; i++){
15 if(data[i] == target){ // i target
16 return i; // i
17 }
18 }
19 return -1; // for-1
20 }
21
22 int main(){
23 // ===== =====
24 int data[5] = {12, 2, 7, 5, 9};
25 int data_count = sizeof(data) / sizeof(int); // = = 5
26 int target = 7;
27 // ----------
28 int found_index = seq_search(data, data_count, target);
29 if(found_index == -1){
30 cout << "" << target << endl;
31 }
32 else{
33 cout << "" << target << ", " << found_index <<
"" << endl;
34 }
35 // ===== =====
36 return 0;
37 }
94
CHAPTER 05
執行結果
7 2
̹̹實例演練
target data
target
Step 01 binary_search
binary_searchtarget
targetleft right
(right - left)/2 + left (right + left)/2
(int) (right - left)/2 + left
95
Step 02
Step 03
1 if(found_index == -1){
2 cout << "" << target << endl;
3 }
4 else{
5 cout << "" << target << ", " << found_index <<
"" << endl;
6 }
Step 04
程式碼
1 /*
2 Ch5-3-binarySearch.cpp
3
4 : binary_search
5 : 1.0
6 */
7
8 #include <iostream>
9
10 using namespace std;
11
12 // ----- binary_search: target -----
13 int binary_search int data[], int left, int right, int target){
(
14 if(left > right){ //
15 return -1;
16 }
17
18 int middle = (int)((right-left) / 2 + left);// left~right
(middle)
96
CHAPTER 05
執行結果
7 3
5-2
5-2
97
5-2
( ) ( )
7
0 1 2 3 4 5 6 7 8 9 10
7<1111
0 10 2 3 5 7 9 11 12 15 20 22 25
7>55
0 4 2 3 5 7 9 11 12 15 20 22 25
3 4 2 3 5 7 9 11 12 15 20 22 25
2
N N
log2N 2-5
5,000,000
100
1
0.17 4 0.0000077
98
時況報
導
1.
90 30 40
20 40 90
70 80 70
60 30 20
1 int main(){
2 int data_2d[4][3] = {
3 {90, 30, 40},
4 {20, 40, 90},
5 {70, 80, 70},
6 {60, 30, 20}
7 };
8 int data_sum[4] = {0, 0, 0, 0};
9 int data_count = sizeof(data_sum) / sizeof(int);
10
11 string animal_names[4] = {"" , "" , "" , "" };
12 int animal_num = sizeof(animal_names) / sizeof(string);
13 // ----------
14 for(int i = 0; i < animal_num; i++){
15 for(int j = 0; j < 3; j++){
16 data_sum[i] += data_2d[i][j];
17 }
18 }
19 // ----------
20 cout << ":" << endl;
21 print_arr_string(animal_names, animal_num);
99
22 print_arr_int(data_sum, data_count);
23 cout << endl;
24 // ----------
25 for(int i = 0; i < data_count-1; i++){
26 one_bubble(data_sum, animal_names, i, data_count);
27 }
28 // ----------
29 for(int i = 0; i < 3; i++){
30 cout << " " << i+1 << " : " << animal_names[data_count-i-1] << endl;
31 }
32
33 return 0;
34 }
100