05. Selection Sort


1

Колеги някой изкара ли макс точки на тази задача и ако е така моля да постне решение. Прилагам моето да споделите къде бъркам, защото идея нямам. Получих само 10 т. Тук




Отговори



1
[].sort() би било полезно в тази задача.



0
Да, но това не е selection sort. Аз успях да докарам точките до 30 :D Selеction Sort - като за 30т.

от bgdopus (44 точки)


1
Здравей, колега! С твоя код успях да изкарам макс 70 точки. Добавих '+' в if(+args[j] < + args[min]), но не успях да открия защо дава останалите грешки за превишаване на времето, а пробвах всякакви варианти. Ето и моя код, който изкарва 100 точки - единственото, което според мен правя по-различно е, че премахвам първия елемент от масива.
function solve(args) { args.shift(); var seq = args, seqLength = seq.length, min, j, k, swap; for (j = 0; j < seqLength - 1; j+=1) { min = j; for (k = j + 1; k < seqLength; k+=1) { if (+seq[k] < +seq[min]) { min = k; } } swap = seq[j]; seq[j] = seq[min]; seq[min] = swap; } for (i = 0; i < seqLength; i+=1) { console.log(seq[i]); } }

от s.tsenova (5 точки)


4

Благодаря ти колежке много полезно беше, поради видимия ми дефицит на точки не мога да ти вдигна палец :)

Решение Selection Sort - Selection Sort като за 100т.


от bgdopus (44 точки)


1

Ето и моят вариант за 100/100. Доста по-лесно ще е със sort() , но уви не дават.

function sort(args) {

    var input = args[0].split('\n'),
        n = +input[0],
        numbers = input.slice(1),
        min = numbers[0];

    for (var j = 0; j < n; j += 1) {
        min = numbers[j];
        for (var i = j; i < n; i += 1) {

            if (+numbers[i] < min) {
                min = +numbers[i];
                numbers[i] = +numbers[j];
                numbers[j] = min;
            }
        }
    }
    console.log(numbers.join('\n'));
}




1

Добре ... сега... защо броят на елементите на отговорите не съвпадат с броят на елементите на входните данни? Само аз ли виждам 1 елемент повече в този масив или не?

Аз въобще не мога да мина нулевите тестове. Някой идея какво пропускам?

function solve(args) { let currentElementIndex, nextElementIndex, lowestElementIndex, temp; for (currentElementIndex = 0; currentElementIndex < args.length - 1; currentElementIndex += 1) { lowestElementIndex = currentElementIndex; for (nextElementIndex = currentElementIndex + 1; nextElementIndex < args.length; nextElementIndex += 1) { if (+args[nextElementIndex] < +args[lowestElementIndex]) { lowestElementIndex = nextElementIndex; } } if (lowestElementIndex !== currentElementIndex) { temp = args[lowestElementIndex]; args[lowestElementIndex] = args[currentElementIndex]; args[currentElementIndex] = temp; } } console.log(args.join('\n')); }


от gchankov (55 точки)


1

Нулевия елемент в масива е големината на масива, а самия масив започва от 1вия елемент до края. В доста от задачите така се дават входните данни.

Вече, като имаш това в предвид, можеш от входния масив да изрежеш първия елемент и да работиш с новия масив или във for цикъла да завъртиш от 1-вия елемент нататък.


от plmn.tnsv (130 точки)

1
Вероятно са копи/пействали условията от C# домашните и затова пише, че входът е на два реда.

от Pamir (30 точки)



1

function solve (args) {
  var length = +args[0],min = +args[1], minIndex = 0,
    el = 0;
  for (var i = 1; i < args.length - 1; i++) {
    min = +args[i];
    minIndex = i;
    for (var j = i + 1; j < args.length; j++) {
      if (+args[j] < min) {
        min = +args[j];
        minIndex = j;
      }
    }

    el = args[i];
    args[i] = min;
    args[minIndex] = el;
  }

  for (i = 1; i <= length; i += 1) {
    console.log(args[i]);
  }
}Решение  за 100 точки.




1
function solve(args){
    let n=+args[0],
        arr=[];
        for(let i=1;i<=n;i+=1){
            arr.push(args[i]);
        }
        // arr.sort();
        arr.sort(function(a, b){return a-b});
        for(let i=0;i<=arr.length-1;i+=1){
            console.log(arr[i]);
        }

    


}



1

Късничко се включвам, но на някой може да му е интересно да споделя моето решение , според мен е доста просто , но sort() работи на принципа на вашите решения и е доста лесно , като е наготово, иначе е пределно ясно, че в задачата се иска да си размърдаме мозъците ...

function solve(args){
args.splice(0,1);
args.sort(function(a, b){return a-b});
console.log(args.join('\n'));
}