2. (三)時間與空間複雜度
時間複雜度 空間複雜度
快速排序法 平均:O(nlogn)
最佳:O(nlogn)
最差:O(n2
)
Ο(log n) ~ Ο(n)
合併排序法 平均:O(nlogn)
最佳:O(nlogn)
最差:O(nlogn)
Ο(n)
3. 請使用虛擬碼(pseudocode)或 C 語言或 C++語言撰寫程式片段。
(1).以遞迴的呼叫方式寫出二元搜尋法(binary search)
。
(2).請說明時間複雜度為何?
參考解答:
(1).
int binarySearch (int sortedArray [ ] , int key , int , int μ) {
if ( <=μ) {
int mid=( +μ)/2;
if (key == sortedArray [mid])
return mid;
else if (key<sortedArray [mid])
return binarySearch (sortedArray ,key , , mid-1) ;
else
return binarySearch (sortArray ,key ,mid+1 ,μ) ;
} else {
return -1 ; //Not Found
}
}
(2). O(logn)
3. 4.請問下列輸出為何?
#include <stdio.h>
class A{
public:
int X;
A() { X = 1; printf("X = %dn", X); }
};
class B : public A {
public:
B() { X = 2; printf("X = %dn", X); }
};
main()
{
B * pB = new B;
}
參考解答:
X = 1
X = 2
4. 5.
#include <stdio.h>
#include <stdlib.h>
void F(int* p, int n) {
int i;
for (i = 0; i < n - 1; i = i + 1) {
int tmp = *(p + i + 1);
*(p + i + 1) = *(p + i);
*(p + i) = tmp;
}
}
int main() {
int a[5] = { 7,3,6,9,5 };
F(a, 5);
for(int i=0;i<=4;i++){
printf("%dn", a[i]);
}
system("pause");
return 0;
}
參考解答:
3
6
9
5
7