Skip to content

Commit 4659f3e

Browse files
committed
Chapter 02 section 04 c++ codes updated and Java codes added.
1 parent 31f04fd commit 4659f3e

File tree

11 files changed

+254
-40
lines changed

11 files changed

+254
-40
lines changed

02-Time-Complexity/Course Code (C++)/04-Time-Complexity-Experiments/MyAlgorithmTester.h

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,27 @@ namespace MyAlgorithmTester{
1515
// O(logN)
1616
int binarySearch(int arr[], int n, int target){
1717

18-
int l = 0, r = n-1;
19-
while( l <= r ){
18+
int l = 0, r = n - 1;
19+
while(l <= r){
2020

21-
int mid = l + (r-l)/2;
22-
if( arr[mid] == target ) return mid;
23-
if( arr[mid] > target ) r = mid - 1;
21+
int mid = l + (r - l) / 2;
22+
if(arr[mid] == target) return mid;
23+
if(arr[mid] > target) r = mid - 1;
2424
else l = mid + 1;
2525
}
2626

2727
return -1;
2828
}
2929

3030
// O(N)
31-
int findMax( int arr[], int n ){
31+
int findMax(int arr[], int n){
3232

3333
assert( n > 0 );
3434

3535
int res = arr[0];
36-
for( int i = 1 ; i < n ; i ++ )
37-
if( arr[i] > res )
36+
for(int i = 1 ; i < n ; i ++)
37+
if(arr[i] > res)
3838
res = arr[i];
39-
4039
return res;
4140
}
4241

@@ -46,25 +45,25 @@ namespace MyAlgorithmTester{
4645
for(int i = l ; i <= r ; i ++)
4746
aux[i] = arr[i];
4847

49-
int i = l, j = mid+1;
48+
int i = l, j = mid + 1;
5049
for( int k = l ; k <= r; k ++ ){
5150

52-
if( i > mid ) { arr[k] = aux[j]; j ++;}
53-
else if( j > r ){ arr[k] = aux[i]; i ++;}
54-
else if( aux[i] < aux[j] ){ arr[k] = aux[i]; i ++;}
55-
else { arr[k] = aux[j]; j ++;}
51+
if(i > mid) { arr[k] = aux[j]; j ++;}
52+
else if(j > r){ arr[k] = aux[i]; i ++;}
53+
else if(aux[i] < aux[j]){ arr[k] = aux[i]; i ++;}
54+
else { arr[k] = aux[j]; j ++;}
5655
}
5756
}
5857

5958
void mergeSort( int arr[], int n ){
6059

6160
int *aux = new int[n];
62-
for( int i = 0 ; i < n ; i ++ )
61+
for(int i = 0 ; i < n ; i ++)
6362
aux[i] = arr[i];
6463

65-
for( int sz = 1; sz < n ; sz += sz )
66-
for( int i = 0 ; i < n ; i += sz+sz )
67-
__merge(arr, i, i+sz-1, min(i+sz+sz-1,n-1), aux );
64+
for(int sz = 1; sz < n ; sz += sz)
65+
for(int i = 0 ; i < n ; i += sz+sz)
66+
__merge(arr, i, i + sz - 1, min(i + sz + sz - 1, n - 1), aux);
6867

6968
delete[] aux;
7069

02-Time-Complexity/Course Code (C++)/04-Time-Complexity-Experiments/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ int main() {
1010

1111
// 数据规模倍乘测试findMax
1212
// O(n)
13-
cout<<"Test for findMax:"<<endl;
14-
for( int i = 10 ; i <= 26 ; i ++ ){
13+
cout << "Test for findMax:" << endl;
14+
for( int i = 10 ; i <= 28 ; i ++ ){
1515

16-
int n = pow(2,i);
16+
int n = pow(2, i);
1717
int *arr = MyUtil::generateRandomArray(n, 0, 100000000);
1818

1919
clock_t startTime = clock();
2020
MyAlgorithmTester::findMax(arr, n);
2121
clock_t endTime = clock();
2222

23-
cout<<"data size 2^"<<i<<" = "<<n<<"\t";
24-
cout<<"Time cost: "<<double(endTime - startTime)/CLOCKS_PER_SEC<<endl;
23+
cout << "data size 2^" << i << " = " << n << "\t";
24+
cout << "Time cost: " << double(endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;
2525

2626
delete[] arr;
2727
}

02-Time-Complexity/Course Code (C++)/04-Time-Complexity-Experiments/main2.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ int main() {
99

1010
// 数据规模倍乘测试selectionSort
1111
// O(n^2)
12-
cout<<"Test for selectionSort:"<<endl;
13-
for( int i = 10 ; i <= 15 ; i ++ ){
12+
cout << "Test for Selection Sort:" << endl;
13+
for( int i = 10 ; i <= 16 ; i ++ ){
1414

15-
int n = pow(2,i);
15+
int n = pow(2, i);
1616
int *arr = MyUtil::generateRandomArray(n, 0, 100000000);
1717

1818
clock_t startTime = clock();
19-
MyAlgorithmTester::selectionSort(arr,n);
19+
MyAlgorithmTester::selectionSort(arr, n);
2020
clock_t endTime = clock();
2121

22-
cout<<"data size 2^"<<i<<" = "<<n<<"\t";
23-
cout<<"Time cost: "<<double(endTime - startTime)/CLOCKS_PER_SEC<<endl;
22+
cout << "data size 2^" << i << " = " << n << "\t";
23+
cout << "Time cost: " << double(endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;
2424

2525
delete[] arr;
2626
}

02-Time-Complexity/Course Code (C++)/04-Time-Complexity-Experiments/main3.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ int main() {
99

1010
// 数据规模倍乘测试binarySearch
1111
// O(logn)
12-
cout<<"Test for binarySearch:"<<endl;
13-
for( int i = 10 ; i <= 28 ; i ++ ){
12+
cout << "Test for Binary Search:" << endl;
13+
for(int i = 10 ; i <= 28 ; i ++){
1414

15-
int n = pow(2,i);
15+
int n = pow(2, i);
1616
int *arr = MyUtil::generateOrderedArray(n);
1717

1818
clock_t startTime = clock();
19-
MyAlgorithmTester::binarySearch(arr,n,0);
19+
MyAlgorithmTester::binarySearch(arr, n, 0);
2020
clock_t endTime = clock();
2121

22-
cout<<"data size 2^"<<i<<" = "<<n<<"\t";
23-
cout<<"Time cost: "<<double(endTime - startTime)/CLOCKS_PER_SEC<<endl;
22+
cout << "data size 2^" << i << " = " << n << "\t";
23+
cout << "Time cost: " << double(endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;
2424

2525
delete[] arr;
2626
}

02-Time-Complexity/Course Code (C++)/04-Time-Complexity-Experiments/main4.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ int main() {
99

1010
// 数据规模倍乘测试mergeSort
1111
// O(nlogn)
12-
cout<<"Test for mergeSort:"<<endl;
12+
cout << "Test for Merge Sort:" << endl;
1313
for( int i = 10 ; i <= 26 ; i ++ ){
1414

1515
int n = pow(2,i);
16-
int *arr = MyUtil::generateRandomArray(n,0,1<<30);
16+
int *arr = MyUtil::generateRandomArray(n, 0, 1<<30);
1717

1818
clock_t startTime = clock();
19-
MyAlgorithmTester::mergeSort(arr,n);
19+
MyAlgorithmTester::mergeSort(arr, n);
2020
clock_t endTime = clock();
2121

22-
cout<<"data size 2^"<<i<<" = "<<n<<"\t";
23-
cout<<"Time cost: "<<double(endTime - startTime)/CLOCKS_PER_SEC<<endl;
22+
cout << "data size 2^" << i << " = " << n << "\t";
23+
cout << "Time cost: " << double(endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;
2424

2525
delete[] arr;
2626
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Created by liuyubobobo.
3+
*/
4+
public class Main {
5+
6+
public static void main(String[] args) {
7+
8+
// 数据规模倍乘测试findMax
9+
// O(n)
10+
System.out.println("Test for findMax:");
11+
for( int i = 10 ; i <= 28 ; i ++ ){
12+
13+
int n = (int)Math.pow(2, i);
14+
Integer[] arr = MyUtil.generateRandomArray(n, 0, 100000000);
15+
16+
long startTime = System.currentTimeMillis();
17+
Integer maxValue = MyAlgorithmTester.findMax(arr, n);
18+
long endTime = System.currentTimeMillis();
19+
20+
System.out.print("data size 2^" + i + " = " + n + "\t");
21+
System.out.println("Time cost: " + (endTime - startTime) + " ms");
22+
}
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Created by liuyubobobo.
3+
*/
4+
public class Main2 {
5+
6+
public static void main(String[] args) {
7+
8+
// 数据规模倍乘测试selectionSort
9+
// O(n^2)
10+
System.out.println("Test for Selection Sort:");
11+
for( int i = 10 ; i <= 16 ; i ++ ){
12+
13+
int n = (int)Math.pow(2,i);
14+
Integer[] arr = MyUtil.generateRandomArray(n, 0, 100000000);
15+
16+
long startTime = System.currentTimeMillis();
17+
MyAlgorithmTester.selectionSort(arr, n);
18+
long endTime = System.currentTimeMillis();
19+
20+
System.out.print("data size 2^" + i + " = " + n + "\t");
21+
System.out.println("Time cost: " + (endTime - startTime) + " ms");
22+
}
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Created by liuyubobobo.
3+
*/
4+
public class Main3 {
5+
6+
public static void main(String[] args) {
7+
8+
// 数据规模倍乘测试binarySearch
9+
// O(logn)
10+
System.out.println("Test for Binary Search:");
11+
for(int i = 10 ; i <= 28 ; i ++){
12+
13+
int n = (int)Math.pow(2, i);
14+
Integer[] arr = MyUtil.generateOrderedArray(n);
15+
16+
long startTime = System.currentTimeMillis();
17+
MyAlgorithmTester.binarySearch(arr, n, 0);
18+
long endTime = System.currentTimeMillis();
19+
20+
System.out.print("data size 2^" + i + " = " + n + "\t");
21+
System.out.println("Time cost: " + (endTime - startTime) + " ms");
22+
}
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Created by liuyubobobo.
3+
*/
4+
public class Main4 {
5+
6+
public static void main(String[] args) {
7+
8+
// 数据规模倍乘测试mergeSort
9+
// O(nlogn)
10+
System.out.println("Test for Merge Sort:");
11+
for( int i = 10 ; i <= 26 ; i ++ ){
12+
13+
int n = (int)Math.pow(2,i);
14+
Integer[] arr = MyUtil.generateRandomArray(n, 0, 1<<30);
15+
16+
long startTime = System.currentTimeMillis();
17+
MyAlgorithmTester.mergeSort(arr, n);
18+
long endTime = System.currentTimeMillis();
19+
20+
System.out.print("data size 2^" + i + " = " + n + "\t");
21+
System.out.println("Time cost: " + (endTime - startTime) + " s");
22+
}
23+
}
24+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/**
2+
* Created by liuyubobobo.
3+
*/
4+
public class MyAlgorithmTester {
5+
6+
private MyAlgorithmTester(){}
7+
8+
// O(logN)
9+
public static int binarySearch(Comparable arr[], int n, Comparable target){
10+
11+
int l = 0, r = n - 1;
12+
while(l <= r){
13+
14+
int mid = l + (r - l) / 2;
15+
if(arr[mid].compareTo(target) == 0) return mid;
16+
if(arr[mid].compareTo(target) > 0 ) r = mid - 1;
17+
else l = mid + 1;
18+
}
19+
20+
return -1;
21+
}
22+
23+
// O(N)
24+
public static Integer findMax(Integer[] arr, int n){
25+
26+
assert n > 0;
27+
28+
Integer res = arr[0];
29+
for(int i = 1 ; i < n ; i ++)
30+
if(arr[i]> res)
31+
res = arr[i];
32+
return res;
33+
}
34+
35+
// O(NlogN)
36+
public static void mergeSort(Comparable[] arr, int n ){
37+
38+
Comparable[] aux = new Comparable[n];
39+
for(int i = 0 ; i < n ; i ++)
40+
aux[i] = arr[i];
41+
42+
for(int sz = 1; sz < n ; sz += sz)
43+
for(int i = 0 ; i < n ; i += sz+sz)
44+
merge(arr, i, i + sz - 1, Math.min(i + sz + sz - 1, n - 1), aux);
45+
46+
return;
47+
}
48+
49+
private static void merge(Comparable[] arr, int l, int mid, int r, Comparable[] aux){
50+
51+
for(int i = l ; i <= r ; i ++)
52+
aux[i] = arr[i];
53+
54+
int i = l, j = mid + 1;
55+
for( int k = l ; k <= r; k ++ ){
56+
57+
if(i > mid) { arr[k] = aux[j]; j ++;}
58+
else if(j > r){ arr[k] = aux[i]; i ++;}
59+
else if(aux[i].compareTo(aux[j]) < 0){ arr[k] = aux[i]; i ++;}
60+
else { arr[k] = aux[j]; j ++;}
61+
}
62+
}
63+
64+
// O(N^2)
65+
public static void selectionSort(Comparable[] arr, int n ){
66+
67+
for(int i = 0 ; i < n ; i ++){
68+
int minIndex = i;
69+
for( int j = i + 1 ; j < n ; j ++ )
70+
if(arr[j].compareTo(arr[minIndex]) < 0)
71+
minIndex = j;
72+
73+
swap(arr, i, minIndex);
74+
}
75+
76+
return;
77+
}
78+
79+
private static void swap(Object[] arr, int i, int j){
80+
81+
if(i < 0 || i >= arr.length)
82+
throw new IllegalArgumentException("i is out of bound");
83+
84+
if(j < 0 || j >= arr.length)
85+
throw new IllegalArgumentException("j is out of bound");
86+
87+
Object t = arr[i];
88+
arr[i] = arr[j];
89+
arr[j] = t;
90+
}
91+
}

0 commit comments

Comments
 (0)