алгоритм по которому числа сортируются по возростанию

176
12 марта 2022, 08:30

function with6(){ 
    let a = +num21.value; 
    let b = +num22.value; 
    let c = +num23.value; 
    let d = +num24.value; 
    let e = +num25.value; 
    let f = +num26.value; 
    let max; 
    let min; 
    let mid1; 
    let mid2; 
    let mid3; 
    let mid4; 
    let max1; 
    let min1; 
    let max2; 
    let min2; 
    let max3; 
    let min3; 
    if(a>b){ 
        max1 = a; 
        min1 = b; 
    }else{ 
        max1 = b; 
        min1 = a; 
    } 
    if(c>d){ 
        max2 = c; 
        min2 = d; 
    }else{ 
        max2 = d; 
        min2 = c; 
    } 
    if(e>f){ 
        max3 = e; 
        min3 = f; 
    }else{ 
        max3 = f; 
        min3 = e; 
    } 
    if(max1>max2){ 
        max = max1; 
        mid1 = max2; 
    }else{ 
        max = max2; 
        mid1 = max1; 
    } 
    if(min1<min2){ 
        min = min1; 
        mid2 = min2; 
    }else{ 
        min = min2; 
        mid2 = min1; 
    } 
    if(max2>max3){ 
        max = max2; 
        mid3 = max3; 
    }else{ 
        max = max3; 
        mid3 = max2; 
    } 
    if(min2<min3){ 
        min = min2; 
        mid4 = min3; 
    }else{ 
        min = min3; 
        mid4 = min2; 
    } 
    if(mid1<mid2){ 
        rez.innerHTML = min+','+mid1+','+mid2+','+mid3+','+mid4+','+max 
    }else{ 
        rez.innerHTML = min+','+mid2+','+mid1+','+mid3+','+mid4+','+max 
    } 
    if(mid3<mid4){ 
        rez.innerHTML = min+','+mid1+','+mid2+','+mid3+','+mid4+','+max 
    }else{ 
        rez.innerHTML = min+','+mid1+','+mid2+','+mid4+','+mid3+','+max 
    } 
}
<input id="num21"> 
 <input id="num22"> 
 <input id="num23"> 
 <input id="num24"> 
 <input id="num25"> 
 <input id="num26"> 
 <button onclick="with6()">сортировать</button> 
 <h1 id="rez" style="margin: auto"></h1>

написал вот по такому алгоритму с четыремя числами, всё получилос, теперь задача с 6 числами не выходит,использовать sort нельзя

Answer 1

А если чисел будет 46?

Сделайте вот так:

function sortInputs() { 
  let array = document.querySelectorAll('.inputs input'); 
  array = Array.from(array); 
  let sortedArray = array.sort((a, b) => a.value - b.value); 
  let parent = document.querySelector('.inputs'); 
  while (parent.hasChildNodes()) { 
    parent.removeChild(parent.firstChild); 
  } 
  sortedArray.forEach(function(elem) { 
    parent.appendChild(elem); 
  }); 
} 
function selfRandom(min, max) 
{ 
  return Math.floor(Math.random() * (max - min + 1)) + min; 
} 
function addInput() { 
  let parent = document.querySelector('.inputs'); 
  let elem = document.createElement("input"); 
  elem.type = "text"; 
  elem.class = "number_input"; 
  elem.value = selfRandom(1, 10); 
  parent.appendChild(elem); 
}
.container { 
  max-width: 500px; 
} 
 
.inputs { 
  display: flex; 
  flex-wrap:wrap;  
  justify-content:space-between; 
} 
 
.inputs input { 
  flex: 0 0 48%; 
  margin-top: 10px; 
} 
 
.buttons { 
  display: flex; 
  margin-top: 15px; 
  justify-content: space-between; 
} 
 
.buttons button { 
  flex: 0 0 48%; 
  border: 1px solid #fff; 
  border-radius: 5px; 
  padding: 15px 0px; 
  font-size: 17px; 
} 
 
.buttons button.add { 
  color: #004085; 
  background-color: #cce5ff; 
  border-color: #b8daff; 
} 
 
.buttons button.sort { 
  color: #155724; 
  background-color: #d4edda; 
  border-color: #c3e6cb; 
}
<div class="container"> 
  <div class="inputs"> 
    <input type="text" class="number_input"> 
    <input type="text" class="number_input"> 
    <input type="text" class="number_input"> 
    <input type="text" class="number_input"> 
    <input type="text" class="number_input"> 
    <input type="text" class="number_input"> 
  </div> 
  <div class="buttons"> 
    <button onclick="sortInputs()" class="sort">Сортировать</button> 
    <button onclick="addInput()" class="add">Добавить input</button> 
 
  </div>

Объяснение

Вы делаете из набора input элементов сначала NodeList, затем Array, затем сортируете его по возрастанию и затем заменяете отсортированными изначальные inputs.

Для работы не требуются id элементов, функции не ограничены количеством, можно работать динамически с элементами - сплошные плюсы.

Будут вопросы по коду - постараюсь ответить.

Answer 2

Есть вариант проще. Зачем такие сложности:

    function with6() { 
        var nums = document.getElementsByClassName('inp'); // Получаем все элементы с классом inp 
        let arr = []; 
        for (i = 0; i < nums.length; i++){ // Выполняем действие для каждого элемента. nums.length тут это количество найденных элементов, можно так же через forEach 
            let val = nums[i].value; // Получаем значение каждого элемента 
            arr.push(val); // Добавляем в массив 
        } 
 
        let obj = arr.reduce((o, v, i) => { o[v] = v; return o; }, {});  // Проводим сортировку массива 
        arr = Object.keys(obj).map(num => parseInt(num)); // Пересобираем массив. 
 
        document.getElementById('rez').innerText = arr; 
        console.log(arr); // выводим новый массив 
    }
<input id="num21" class="inp"> 
<input id="num22" class="inp"> 
<input id="num23" class="inp"> 
<input id="num24" class="inp"> 
<input id="num25" class="inp"> 
<input id="num26" class="inp"> 
<button onclick="with6()">сортировать</button> 
<h1 id="rez" style="margin: auto"></h1>

READ ALSO
Web приложение на Java + Javascript

Web приложение на Java + Javascript

Стоит задача написать web приложение на Java (backend) и html+css+javascript(frontend)Java более мение знаю (серверная часть с обращением к главной html страницы написаны...

95
Как озвучить текст на сайте?

Как озвучить текст на сайте?

Не могу найти подходящий вариантПомогите, если знаете

110
Как объединить код js в один файл

Как объединить код js в один файл

Я пытаюсь разобраться что натворил разработчик но я не могу понять как это блин работает

179
Скроллинг страницы с lazy load

Скроллинг страницы с lazy load

У меня есть страница с товарами, на неё сразу выводится 12 товаров, а потом когда страница проскроллилась до конца, скрипт обращается к PHP, передает...

102