voidFunc2(intN){int count =0;for(int k =0; k <2*N;++k){++count;}intM=10;while(M--){++count;}printf("%d\n", count);}Func2的基本操作次数为2n+10 ,根据大O渐
近法,这个算法的时间复杂度为O(n).
举例三(冒泡排序时间的时间复杂度)
voidBubbleSort(int arr[],int len){int i, j, temp;for(j =0; j < len -1; j++){for(i =0; i < len -1- j; i++){if(arr[i]> arr[i +1]){
temp = arr[i];
arr[i]= arr[i +1];
arr[i +1]= temp;}}}}
冒泡排序的时间复杂度应该从思想上进行分析,
最好的情况下只排序一趟也就是n-1.最坏的情
况下整个数组每个数都得进行排序,那么n个
数就得排序(n-1)+(n-2).....+1=n*(n+1)/2次,时间复杂度就为O(n).
举例四(二分查找算法的时间复杂度)
intBinarySearch(int* a,int n,int x){assert(a);int begin =0;int end = n -1;while(begin < end){int mid = begin +((end - begin)>>1);if(a[mid]< x)
begin = mid +1;elseif(a[mid]> x)
end = mid;elsereturn mid;}return-1;}
二分查找算法的时间复杂度也应从思想上进行
分析,假设要查找x次,最好的情况第一次就
找到。那么最坏情况就应该是最后一次找到
或者没找到。根据二分算法,每次的查找以
后都得折半。所以1*2*2*2....(x个2)=数组
长度n,所以x就应该等于log2n