Вчера я пошел на собеседование,Какова должна быть временная сложность моего алгоритма сортировки?
Он попросил меня написать программу для сортировки массива в порядке возрастания.
Я написал программу, которая заключается в следующем,
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]);
Интервьюер не был удовлетворен, он сказал: «Я не прошу для оптимального решения, но ваш алгоритм сортировки является худшим, что п^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
Он сказал, что оба итерацию слишком много. У нас может быть лучшее решение, использующее простой тип пузырьков.
Но то, что я считаю моим вторым решением, является самой пузырной сортировкой.
Можете ли вы сказать мне, что есть сложность для обоих алгоритмов, и как же я могу улучшить второй пузырь рода
По-видимому, первый из них даже не работает правильно: 'ОКОНЧАТЕЛЬНЫЙ 12,4,22,45,78' – Bergi
" * алгоритм сортировки худший, что n^2. * "- имел ли он в виду, что сложность наихудшего случая является «O (n²)», или он имел в виду, что (некоторая) сложность хуже, чем «O (n²)»? – Bergi
Thats, что сказал интервьюер, что мое первое решение было худшим, что n поднял до 2 –