There is an unfinished sorting function, which should find the minimum element of the array and insert it into the new array. Since I don’t know how to remove the previous minimum element, the function returns an array from the minimal number itself from the given array (for example [44, 5, 2, 6, 3] it gives [2, 2, 2, 2, 2] , instead of [2, 3, 5, 6, 44] )

I need to add / correct the code below, not a new or abbreviated version. I want to understand how it works through functions and cycles, how many I have not tried in different ways - all in vain:

 function sort(arr) { var sorted = []; var min = Infinity; for (j = 0; j < arr.length; j++) { for (var i = 0; i < arr.length; i++) { if (arr[i] < min ) { min = arr[i]; } } sorted.push(min); } return sorted; } 
  • one
    arr.splice(i, 1) - will remove the element - vp_arth
  • If any of the answers led you to a decision, you should mark it as true - a green check mark to the left of the answer. - Nick Volynkin ♦

5 answers 5

The code in question is not optimal, to put it mildly, but it can be β€œfixed”)

 function sort(arr) { var sorted = []; var min = Infinity; var minIndex = Infinity; for (j = 0; j < arr.length; j++) { for (var i = 0; i < arr.length; i++) { if (arr[i] < min ) { min = arr[i]; minIndex = i;// Π½ΡƒΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ индСкс ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° ΠΊΡ€ΠΎΠΌΠ΅ самого ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· исходного массива } } arr[minIndex] = Infinity;// исходный массив Π½Π°Π΄ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ большС "Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ минимального элСмСнта, поставим Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»Π° большС любого" sorted.push(min); min = Infinity;// Π½Π°Π΄ΠΎ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΈΠ½Π°Ρ‡Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ мСньшС, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ for } return sorted; } 
     var mins = []; //сюда Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡ‹ //массив массивов var arr = [ [10, 1, 5, 3, 6], [65, 21, 45, 32, 16], [300, 20, 25, 78, 6015], ]; var absMin = arr[0][0]; //ΠΌΠΈΠΌΠΈΠΌΡƒΠΌ ΠΏΠΎ всСм строкам for (var i = 0; i < arr.length; i++) { var row = arr[i]; //поиск ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° Π² строкС var min = row[0]; for (var j = 0; j < row.length; j++) { var num = row[j]; if (num < min) min = num; if (num < absMin) absMin = num; } mins.push(min); } document.write('ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС:<br> [' + mins.join(', ') + ']'); document.write('<hr>'); document.write('ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΌΠΈΠΌΠΈΠΌΡƒΠΌ:<br>' + absMin); 

    Demonstration of work here https://codepen.io/lukas-pierce/pen/MJdmWm

    • You misunderstood me, I need to get [2, 3, 5, 6, 44] from [44, 5, 2, 6, 3], but thanks for your code, it will be interesting to understand it! - SeerPauka

    Immediately did not understand the problem statement:

     var nums = [44, 5, 2, 6, 3]; nums.sort(function(a, b){ return a - b; }); document.write('[' + nums.join(', ') + ']'); 

    working example here https://codepen.io/lukas-pierce/pen/jyomyB

    • Sorry, but this is also not what I need, I want to write the sort function myself, as in the code I threw, only there a couple of lines are not enough to remove the previous minimum numbers - SeerPauka

    So what?

     console.info([44, 5, 2, 6, 3].sort((a, b) => a > b)); 

    No need to create a bike in this case.
    It will be slow (relatively native implementation) and difficult to maintain.

    But still:

     let arr = [44, 5, 2, 6, 3]; const sort = a => { let len = a.length - 1; // ΠŸΡ€ΠΎΡ…ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту for(let i = 0; i < len; i++) // ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ элСмСнт ΠΏΠΎ массиву for(var e = 0; e < len - i; e++) // Если элСмСнт большС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ if(a[e] > a[e + 1]) // Π’ΠΎ Ρ„Π»ΠΈΠΏΠ°Π΅ΠΌ Π΅Π³ΠΎ (мСняСм мСстами) [a[e], a[e + 1]] = [a[e + 1], a[e]]; return a; }; console.info(sort(arr)); 

    • yes, only I want a bike to sort it out - SeerPauka
    • @SeerPauka, right? - user207618
    • this is a bit wrong, I want not to change their places, but to create a new array, look for the smallest number, push it into a new array, for example [44, 5, 2, 6, 3] find 2, push, delete 2 and 3 now we’re minimal, we are looking for it, pushing and so on, but I don’t know how to delete the previous minimum number - SeerPauka
    • @SeerPauka, It seems you yourself do not understand what you want. After pushing, the numbers again become faceless in this context. Why strain, an example of "manual" sorting I gave. - user207618
     <textarea rows="5" name="source" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнты массива Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ">44, 5, 2, 6, 3</textarea> <br> <button name="do_sort">Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ сортировку</button> <br> <br> <h2>Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚</h2> <textarea rows="5" name="result"></textarea> <script> var btn = document.querySelector('button[name="do_sort"]'), source = document.querySelector('textarea[name="source"]'), result = document.querySelector('textarea[name="result"]'); btn.onclick = function() { try { var arr = JSON.parse("[" + source.value + "]"); result.value = BubbleSort(arr).join(', '); } catch (e) { alert("Ошибка Π² исходных Π΄Π°Π½Π½Ρ‹Ρ…"); } }; /** сортировка ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠ° * @param A - массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ */ function BubbleSort(A) { var n = A.length; for (var i = 0; i < n - 1; i++) { for (var j = 0; j < n - 1 - i; j++) { if (A[j + 1] < A[j]) { var t = A[j + 1]; A[j + 1] = A[j]; A[j] = t; } } } return A; // На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ сортированный ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ массив A. } </script> 

    Link to working example https://codepen.io/lukas-pierce/pen/EZzEEx