我必须按正确顺序放置3个值并将它们打印到控制台。
一个解决方案是将它们放入一个数组然后对它们进行排序,但我记得(从学校时间开始)有更快的比较和排序它们,但是我找不到正确的比较顺序。
您能否告诉我如何将3个值与if
个语句的最小数量进行比较?
答案 0 :(得分:16)
冒泡排序只有3个比较操作,在最坏的情况下只有6个赋值(如果与这种情况下插入排序的行为不相同,它将非常相似):
if (a > b)
swap(a,b)
if (b > c)
swap(b,c)
if (a > b)
swap(a,b)
print a,b,c
无法在少于3次比较中完成,因为数组有n!=6
种可能的排列,ceil(log_2(n!)) = 3
答案 1 :(得分:6)
优化这一点毫无意义。它不会获得任何速度。 O(n!)for 3仍然只有3 * 2 = 6次操作。即使O(2 ^ n)也将是8.您可以真正做任何事情来对这3个值进行排序,而不会发现性能上的差异。
修改的
int a, b, c, min, max, med;//assume values are there for a b c
if( a > b ){
if( a > c ){
max = a;
if( b > c ){
med = b;
min = c;
}else{
med = c;
min = b;
}
}else{
med = a;
max = c;
min = b;
}
}else{
if( b > c ){
max = b;
if( a > c ){
med = a;
min = c;
}else{
med = c;
min = a;
}
}else{
med = b;
max = c;
min = a;
}
}
答案 2 :(得分:0)
据我所知,Java使用 Quicksort 算法进行排序 - 这是一种已经优化的方法。没有速度在这里收获!