在查找成功的情况下,若待查找的数据元素恰好是数组的第一个元素,则只需比较一次即可找到,这就是最好情况,T(n)=O(1),称最好时间复杂度。
若是最后一个元素,则要比较n次才能找到。T(n)=O(n),称最坏时间复杂度。
在查找不成功的情况下,无论何时进行不成功的查找都需要进行n次比较,T(n)=O(n)。
成功查找是的平均次数:(n+1)/2,T(n)=O(n)。 称平均时间复杂度。一般取最坏或平均时间复杂度。
public static int rSearch(int a[], int x) {
int n = a.length;
for (int i = 0; i<n&&i!=a[i];i++) {
if ( i==n)return -1;
else return i;
}
return 0;
}
冒泡排序对数组a中的n个整数数据元素进行排序。
public class 时间复杂度2 {
public static void Bubble_sort(int[] a, int n) {
int temp, flag = 1;
for (int i = 1; i < n && i < flag; i++) {
flag = 0;
for (int j = 0; j < n - i; j++) {
if (a[j] > a[j + 1]) {
flag = 1;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
}
此算法正序最好,逆序最坏T(n)= n(n-1)/2+2n(n-1) = O(n*n)
n个数据元素的a数组中删除第i个元素
public class 时间复杂度3 {
public static int delete(int a[],int n,int i) {
int j;
if(i<1||i>n) return 0;
for(j=i;j<n;j++)
a[j-1]=a[j];
return 1;
}
}
最坏n-1,最好0,所以求平均T(n)=(n-1)
常数阶O(1),
对数阶O(log2n)(以2为底n的对数,下同),
线性阶O(n),
线性对数阶O(nlog2n),
平方阶O(n^2),
立方O(n^3)
,...,
k次方阶O(n^k),
指数阶O(2^n)。
随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
有错误之处,请各位大佬多多指教。