5

I am new to JavaScript, and I have an array which contains numbers.

 var arr = [2,4,8,1,5,9,3,7,6];

How can I sort it using a native for loop in JavaScript?

I know sort function is available, but I want it through for loop.

The output should be:

 var res = [1,2,3,4,5,6,7,8,9];
5

11 Answers 11

22

var Arr = [1, 7, 2, 8, 3, 4, 5, 0, 9];

for (var i = 1; i < Arr.length; i++)
    for (var j = 0; j < i; j++)
        if (Arr[i] < Arr[j]) {
            var x = Arr[i];
            Arr[i] = Arr[j];
            Arr[j] = x;
        }

console.log(Arr);

Sign up to request clarification or add additional context in comments.

1 Comment

This unexplained answer earned the OP a Lifeboat badge. What is it? Bubble sort? What is the idea/gist? From the Help Center: "...always explain why the solution you're presenting is appropriate and how it works". Please respond by editing (changing) your answer, not here in comments (* without * "Edit:", "Update:", or similar - the answer should appear as if it was written today).
3

I would do something like this...

var input = [2,3,8,1,4,5,9,7,6];

var output = [];
var inserted;

for (var i = 0, ii = input.length ; i < ii ; i++){
  inserted = false;
  for (var j = 0, jj = output.length ; j < jj ; j++){
    if (input[i] < output[j]){
      inserted = true;
      output.splice(j, 0, input[i]);
      break;
    }
  }

  if (!inserted)
    output.push(input[i])
}

console.log(output);

Maybe there are more efficient ways, but if you want to use the for loop, it's my first idea...

Comments

0

First create an empty array where the sorted numbers will be pushed into.

let sorted = [];

Secondly, create a very large amount of numbers that none of the numbers of the array can match. This number will be used for the very first comparison to determine which number of the array is smaller.

let comparison = 9000000000;

Create a for loop.

This loop will have another loop inside of it. The inner loop will check for the smallest number in a given array, and once the smallest number is gotten, it will be push into the empty array we created. The smallest number will also be removed from the initial array and then the array will run again.

for(a = 0; a < arr.length; a++){

    //This inner loop fetches the smallest number.
    for(b = 0; b < arr.length; a++){
        if(comparison > arr[b]){
            comparison = arr[b];
        }
    }

    // The smallest number is assigned to comparison
    // Now it being pushed to the empty array
    sorted.push(comparison);

    // Remove the smallest number from the initial array

    let indexOfSmallNumber = arr.indexOf(comparison);
    arr.splice(indexOfSmallNumber, 1);

    // Set the comparison back to 9000000000;
    comparison = 90000000000;

    a = -1;
    // Here, "a" is our main loop index counter and we are
    // setting it to -1 because we don't want it to change
    // to 2 by default, doing this will make the loop run
    // forever until the initial array is empty.
}

Comments

0
let arr = [4, 2, 5, 1]
let temp;

function converter(arr) {

  for(let i=0; i<arr.length; i++) {

    for (let j=i+1; j<arr.length; j++) {

      if(arr[i] > arr[j]) {

        temp = arr[i]
        arr[i] = arr[j]
        arr[j] = temp
      }
    }
  }
  return arr
}

const newArr = converter(arr)
console.log(newArr)

2 Comments

Your answer could be improved with additional supporting information. Please edit your answer to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
This is a repeat of at least one previous answer. What is it? Bubble sort?
0

Use:

let s = [4, 6, 3, 1, 2];
for (let i = 0; i < s.length;) {
    if (s[i] > s[i + 1]) {
        let a = s[i];
        s[i] = s[i + 1];
        s[i + 1] = a;
        i--;
    }
    else {
        i++;
    }
}

This is a sorting algorithm which has a best time complexity of O(n) and the worst time of O(n^2).

This code checks for each number, and then compares to all numbers on the left side.

To check the time it takes each code to run, you can also use this code below:

let start = process.hrtime.bigint()
let end = process.hrtime.bigint()

console.log(end - start) // This measures the time used in nano seconds.

Also for microseconds, you can use this performance.now().

6 Comments

Please do not post an answer that consists essentially of code. Please edit your answer to include an explanation of how and why the code solves the problem, when it should be used, what its limitations are, and if possible a link to relevant documentation.
Re "a sorting algorithm": Which one? Bubble sort?
This seems like a completely bogus answer. How can it sort the array in one pass? By pure luck with the example array? I don't think it will work with the example from the question, [2, 4, 8, 1, 5, 9, 3, 7, 6].
@PeterMortensen have you tried running the code. it works like magic. try running any array and you will see that it sort it
An interesting approach, but it needs (at least) 2 changes to avoid reading beyond the array bounds: he upper terminating condition should be i < s.length - 1, and the i-- should have a guard to prevent it becoming -ve
|
0

Here there is a very simple solution that uses a temporary array to store the values greater than the current one. Then it puts the current value between the lesser and the greater values:

var arr = [2,4,8,1,5,9,3,7,6];
var res = [];
for (const c of arr) {
    let tmp = [];
    while (c < res[res.length-1]) {
        tmp.unshift(res.pop());
    }
    res = [...res, c, ...tmp];
} 

Comments

-1
const numberArr = [5, 9, 2, 8, 4, 10, 1, 3, 7, 6];

function sortedFunction(arr) {
  let sortedArr = [];
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      let n = 0;
      if (arr[i] > arr[j]) {
        n = arr[i];
        arr[i] = arr[j];
        arr[j] = n;
      }
    }
    sortedArr.push(arr[i]);
  }
  return sortedArr;
}
sortedFunction(numberArr);

1 Comment

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
-1

Under the JavaScript array sort section of W3Schools it talks about how to compare a value in an array with the others and then order them based on the values being returned. I updated the code to use a for loop to sort values.

// Ascending points
var points = [5.0, 3.7, 1.0, 2.9, 3.4, 4.5];
var output = [];
var i;
for (i = 0; i < points.length; i++) {
    points.sort(function (a, b) {
        return a - b
    });
    output += points[i] + "<br>";
}
console.log(output);

// Descending points
var points = [5.0, 3.7, 1.0, 2.9, 3.4, 4.5];
var output = [];
var i;
for (i = 0; i < points.length; i++) {
    points.sort(function (a, b) {
        return b - a
    });
    output += points[i] + "<br>";
}
console.log(output);

2 Comments

Since this question was based specifically on JavaScript, I didn't include the complementary HTML, so I realize that this results in only one line on the console.
It's long time ago, but... you are sorting and sorting again, every loop. You only need points.sort(function(a,b) { return a-b }); console.log(points); . But this answer is not helpful because the question contained "using native For Loop".
-1
const array = [12, 3, 45, 61, 23, 45, 6, 7];

function sortArray(array) {
    for (var i = 0; i < array.length; ++i) {
        for (var j = 0; j < array.length - 1 - i; ++j) {
            if (array[j] > array[j + 1]) {
                [array[j], array[j + 1]] = [array[j + 1], array[j]];
            }
        }
    }
    return array;
}

console.log(sortArray(array));

2 Comments

Try to add some comments and additional information that can be helpful in understanding the code. This will help a person to evaluate between different answers easily.
An explanation would be in order. E.g., what is the idea/gist? From the Help Center: "...always explain why the solution you're presenting is appropriate and how it works". Please respond by editing (changing) your answer, not here in comments (without "Edit:", "Update:", or similar - the answer should appear as if it was written today).
-1

Here are the two solutions for the same algorithm:

Solution 1:

We can directly use JavaScript functions:

let arr = [2, 4, 8, 1, 5, 9, 3, 7, 6]

const changeOrder = (arr) => {
    return arr.sort((a, b) => a - b)
}

let result = changeOrder(arr);

console.log(result) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

Solution 2:

We can use a JavaScript for loop for doing the same

let arr = [2, 4, 8, 1, 5, 9, 3, 7, 6]

const changeOrder = (arr) => {
    for(let i=1; i< arr.length; i++) {
        for(let j=0; j < i; j++) {
            if(arr[i] < arr[j]) {
                let x = arr[i]
                arr[i] = arr[j]
                arr[j] = x
            }
        }
    }
    return arr;
}

let result = changeOrder(arr);
console.log(result) // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

1 Comment

What is the last part doing? Implementing bubble sort?
-1

for (let i = 0; i < numbers.length; i++) {
  for (let j = i + 1; j < numbers.length; j++) {
    if (numbers[i] > numbers[j]) {
      const temp = numbers[i];
      numbers[i] = numbers[j];
      numbers[j] = temp;
    }
  }
}

3 Comments

Above logic will not work with example [4, 6, 3, 1, 2].
Is it bubble sort? The swap operation is broken. Only a fancy XOR operation can avoid the temporary variable. Why is this upvoted?
for (let i = 0; i < numbers.length; i++) { for (let j = i + 1; j < numbers.length; j++) { if (numbers[i] > numbers[j]) { const temp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = temp; } } }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.