java快速排序的时间复杂度_程序猿必备排序算法及其时间复杂度分析

  • Post author:
  • Post category:java


常用的时间复杂度

常数阶\(O(1)\)

说明: 只要代码中没有复杂的循环条件,无论代码的函数是多少,一律为常数阶\(O(1)\)

int i=1;

int j=3;

int m=0;

m=i+j;

….

对数阶 \(O(log_2n)\)

说明: 存在循环体,在不考虑循环体的代码执行情况,该循环体本该执行n次,但是循环体将改变循环变量i的大小,每执行一次,i就扩到两倍,即i=i*2,这样就导致循环体会加速趋近终止条件n;假设经过x次后,退出循环体,则有\(2^x>=n\),因此,\(x=log_2n\);同理,当\(i=i*3时,x=log_3n\),退出循环的速度更快,时间复杂度更小。

while(i

i=i*2;

}

线性阶\(O(n)\)

说明: 存在循环体。循环体内代码执行的次数随着规模n的变化而变化,并且是线性变化

for(int i=0;i

int j=o;

j++;

}

线性对数阶\(O(nlog_2n)\)

说明: 将时间复杂度为\(O(log_2n)\)的代码重复执行n次,即为线性对数阶\(O(nlog_2n)\)

//n为一个固定的常数

//i和j均为循环变量

while(i

while(j

j=j*2;



版权声明:本文为weixin_35152781原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。