Loading...
bojanm avatar bojanm 3 Точки

[Homework] JavaScript Basics - JavaScript Loops, Arrays, Strings - Problem {8} - Sort Array

var arr1=[5, 4, 3, 2, 1];
var arr2=[12, 12, 50, 2, 6, 22, 51, 712, 6, 3, 3];
function sortArray(arr){
var endOf=0;
var tempElm;
var elmIndex;
do{
tempElm=arr[endOf];
for(i=endOf;i<arr.length;i++){
if(tempElm>arr[i]){
tempElm=arr[i];
elmIndex=i;
}else {
continue
}
}
arr.splice(elmIndex,1);
arr.unshift(tempElm);
endOf=endOf+1;
}while(endOf != arr.length-1);
console.log(arr)

}
sortArray(arr2);



задача

Problem 8.Sort Array

нещо забих !!!!!

Тагове:
0
JavaScript Fundamentals 15/11/2014 19:42:48
TodorovH avatar TodorovH 216 Точки

Мисля, че променливата tempElm през цялото време е равна на arr[i], понеже първо и даваш стойността на arr[endOf], което е нула, но пък и i започва от endOf, което е нула, и така tempElm и arr[i] са равни на един и същ елемент от масива! После увеличаваш endOf с единица, но пак си остават равни на един и същ елемент от масива! И така никога няма да влезе в if-а! Дано съм бил полезен!

 Редакция: Хм, май не съм прав, само първият оборот на цикъла са равни! Явно не е това проблема!

Поздрави

Христо Тодоров

0
15/11/2014 19:15:32
bojanm avatar bojanm 3 Точки

Ми то това ми е логиката- 1 вия елемент е темп- сравняваме и взимаме най- млакия , тои става 1 , ендоф става +1 за да не обхождаме отначало а от 1  и тн до края. Нещо не се получава маи със splice , unshift. Ти пусна ли програмата през дебъг. стойностите се сменят идеално но после нещо куца. Не искам да те обидя , просто съм забил и не виждам къде греша.

Гледам , че в случая else continue е излишно , но мислех да напиша там код......

1
15/11/2014 19:18:45
TodorovH avatar TodorovH 216 Точки

Тъкмо това правех, прав си че не се получава със splice, unshift! 

0
15/11/2014 20:01:55
TodorovH avatar TodorovH 216 Точки

След малко повече дебъгване се получава следното: splice и unshift си работят както трябва, просто като преместиш най-малкия елемент в началото на поредицата, пренареждаш и всички останали, и така те получават нова позиция в масива и в един момент се получава, че със splice премахваш някои от елементите с голяма стойност!!!

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Според мен е излишно да ползваш shift и unshift. Просто при сравнението на двете променливи ако условието е изпълнено то просто размени стойностите на двата индекса в масива.

Промених кода ти по описания от мен начин: ТУК

Според мен е малко объркващо да се ползва за index променлива с име като endOf. Вместо do-while цикъла бих използвал и for цикъл. Може да видиш това решение ТУК

 

Иначе твоят вариант не работи коректно поради факта, че shift слага елемента винаги на първата позиция в масива. Ти намираш най-малкият елемент и го слагаш на първа позиция. След това намираш следващият най-малък елемент и пак него слагаш на първа позиция, но него трябва да го сложиш на втора... Твоят вариант може да работи с две много дребни корекции. Целта е първо да намериш най-голямото число и да го shift-неш на първа позиция. При следващото завъртане на цикъла ще намери второто най-голямо число и него ще го сложи най-отпред, а най-голямото ще се измести една позиция надясно. В твоето решение трябва да се промени if проверката вместо > да е <=. Втора промяна трябва да е в while проверката - вместо  arr.length-1 го направи arr.length. Ето го и кода: ТУК

0
16/11/2014 03:45:45
TodorovH avatar TodorovH 216 Точки

Нали се сещаш, че сортирането може да бъде във възходящ и в низходящ ред!!! Мисля, че в случая трябва да е в низходящ ред, гледайки първия масив, който явно представя сортиран вече такъв!

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Колега и 100 удивителни да сложиш все тая. Факт е, че не си прочел условието на задачата. И като гледаш уж сортирания масив да ти кажа, че този масив не е сортиран! Този масив е от условието на задачата и трябва и той да се сортира във възходящ ред. 

1
16/11/2014 16:01:04
TodorovH avatar TodorovH 216 Точки

Факт е, че колегата не е постнал условието на задачата и аз се опитвам да му помогна да намери къде куца кода му, а не да му пиша нов! Не е в това смисъла на питането!

0
bojanm avatar bojanm 3 Точки
/**
* Created by bibi on 15.11.2014 г..
*/
var arr1=[5, 4, 3, 2, 1];
var arr2=[12, 12, 50, 2, 6, 22, 51, 712, 6, 3, 3];
function sortArray(arr){
var endOf=0;
var tempElm;
var elmIndex;
do{
tempElm=arr[endOf];
for(i=endOf;i<arr.length;i++){
if(tempElm>=arr[i]){
tempElm=arr[i];
elmIndex=i;
}else {
continue
}
}
arr.splice(elmIndex,1);
arr.splice(endOf,0,tempElm);
endOf=endOf+1;
}while(endOf != arr.length-1);
console.log(arr)

}
sortArray(arr1);
Пооправих малко нещата. мисля , че сега работи коректно. unshift не си беше на мястото.
0
zerefel avatar zerefel 70 Точки

Не е най-релевантното нещо, което съм поствал като отговор, но тази визуална репрезентация би могла да помогне на някого:

ЦЪК
(Отивате долу вляво, давате на Sort -> Go)

В този сайт има и други много хубави визуални репрезентации как работят различни алгоритми.

0
17/11/2014 19:25:53
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.