给定一个不重复的自然数组{3,5,9,7,4,13,15,0,2,20},已知其最大值为20了,请将其按从小到大的方式顺序输出,要求算法复杂度为1 (不要使用Arrays.sort等系统方法 用java语言编程实现)
CREATE OR REPLACE PROCEDURE ShowCursorVariable
你好 你这样实现 结果时间复杂度不是1啊 谢谢
追答杀死N亿脑细胞 终于做出来了,单次循环,1复杂度,哈哈:
public class test {
public static void main(String[] args) {
//第一种
int b[] = { 6, 5, 9, 7, 4, 13, 15, 0, 2, 20 };
int i = 0;
int o = 0;
while (o < (b.length - 1) * (b.length - 1)) {
o++;
if (b[i] < b[i + 1]) {
i++;
} else {
b[i] = b[i + 1] + b[i];
b[i + 1] = b[i] - b[i + 1];
b[i] = b[i] - b[i + 1];
i = 0;
}
}
for (int j = 0; j < b.length; j++)
System.out.print(b[j] + ",");
System.out.println();
//第二种
for (int j = 1; j < b.length; j++){
int a = b[j - 1];
if (b[j] < b[j - 1]){
b[j - 1] = b[j];
b[j] = a;
j = 0;
}
}
for (int j = 0; j < b.length; j++)
System.out.print(b[j] + ",");
}
}
你好 请问你这个实现后的时间复杂度是为1吗 非常感谢!!
追答我觉得是.
不是吧 这个肯定有解决方案的
追答你要把所有的数字都输出出来,肯定是没有O(1)的方法的。
输出N个数字就要O(n)了。哪来的O(1)啊。
上面那些人要么是没看题目意思,要么就是自己对时间复杂度一点都不了解。