【发布时间】:2015-08-14 11:17:48
【问题描述】:
昨天去面试了,
他让我编写一个程序来按升序对数组进行排序。
我写了一个程序如下,
var mySortOne = function(myArray){
var num = 0,
temp = 0,
isSwipe = false,
counter = 0;
for(num = 0; num < myArray.length; num++){
print((++counter)+" => "+myArray);
if (((num+1) < myArray.length) && (myArray[num] > myArray[num+1])){
temp = myArray[num+1];
myArray[num + 1] = myArray[num];
myArray[num] = temp;
isSwipe = true;
}
if(isSwipe){
isSwipe = false;
num = -1;
}
}
print("\n FINAL "+myArray);
};
mySortOne([45,12,78,22,4]);
面试官很不满意,他说“我不是在求最优解,但你的排序算法最差那n^2。”
于是我写了第二个解决方案,如下,
var mySortTwo = function(myArray){
var num = 0,
MAX = myArray.length,
isSwipe = false,
temp = 0,
counter = 0;
do{
isSwipe = false;
for(num = 0; num < MAX; num++){
print((++counter)+" => "+myArray);
if(((num + 1) < MAX) && (myArray[num] > myArray[num+1])){
temp = myArray[num + 1];
myArray[num + 1] = myArray[num];
myArray[num] = temp;
isSwipe = true;
}
}
MAX--;
}while(isSwipe);
print("\n FINAL "+myArray);
};
mySortTwo([45,12,78,22,4]);
但他还是不满意。
我有一些关于这两种算法的打印语句。
第一个算法的输出是
1 => 45,12,78,22,4
2 => 12,45,78,22,4
3 => 12,45,78,22,4
4 => 12,45,78,22,4
5 => 12,45,22,78,4
6 => 12,45,22,78,4
7 => 12,22,45,78,4
8 => 12,22,45,78,4
9 => 12,22,45,78,4
10 => 12,22,45,78,4
11 => 12,22,45,4,78
12 => 12,22,45,4,78
13 => 12,22,45,4,78
14 => 12,22,4,45,78
15 => 12,22,4,45,78
16 => 12,4,22,45,78
17 => 4,12,22,45,78
18 => 4,12,22,45,78
19 => 4,12,22,45,78
20 => 4,12,22,45,78
21 => 4,12,22,45,78
FINAL 4,12,22,45,78
第二个算法的输出如下,
1 => 45,12,78,22,4
2 => 12,45,78,22,4
3 => 12,45,78,22,4
4 => 12,45,22,78,4
5 => 12,45,22,4,78
6 => 12,45,22,4,78
7 => 12,45,22,4,78
8 => 12,22,45,4,78
9 => 12,22,4,45,78
10 => 12,22,4,45,78
11 => 12,22,4,45,78
12 => 12,4,22,45,78
13 => 12,4,22,45,78
14 => 4,12,22,45,78
15 => 4,12,22,45,78
FINAL 4,12,22,45,78
他说两者都迭代太多了。 我们可以使用简单的冒泡排序获得更好的解决方案。
但我认为我的第二个解决方案是冒泡排序本身。
你能告诉我这两种算法的复杂度是多少,以及我如何改进第二个冒泡排序
【问题讨论】:
-
显然,第一个甚至无法正常工作:
FINAL 12,4,22,45,78 -
"排序算法比 n^2 最差。" - 他的意思是最坏情况的复杂性是
O(n²),还是他的意思是(某些)复杂性是比O(n²)还差? -
面试官是这么说的,我的第一个解决方案是最糟糕的,将 n 提高到 2
标签: javascript algorithm sorting