0

I want to sort an array from lowest number to highest. But when I execute the following code, some of my array elements get missed! I don't know why. I need help.`// Sort an array from lowest to highest

function findSmallest(numArr) {
  let smallestNumber = numArr[0]

  for (let i = 0; i < numArr.length; i++) {
    if (numArr[i + 1] < smallestNumber) {
      smallestNumber = numArr[i + 1]
    }
  }
  return smallestNumber;
}

function getSortedArray(arr) {
  let sortedArray = []


  for (j = 0; j < arr.length; j++) {
    let smallest = findSmallest(arr)
    let smallestNumbmerIndex;

    for (let i = 0; i < arr.length; i++) {
      if (arr[i] === smallest) {
        smallestNumbmerIndex = i
      }
    }
    arr.splice(smallestNumbmerIndex, 1)
    sortedArray.push(smallest)
  }

  return sortedArray
}

let myArr = [23, 2, 12, 4]
console.log(getSortedArray(myArr)) // console output => [2, 4] , the rest elements get omitted

0

2 Answers 2

1

since arr shrinks in each iteration, your for loop won't run 4 iterations, only 2 -

use while(arr.length){ instead of the for j loop

function findSmallest(numArr) {
  let smallestNumber = numArr[0]

  for (let i = 0; i < numArr.length; i++) {
    if (numArr[i + 1] < smallestNumber) {
      smallestNumber = numArr[i + 1]
    }
  }
  return smallestNumber;
}

function getSortedArray(arr) {
  let sortedArray = []


  while(arr.length) {
    let smallest = findSmallest(arr)
    let smallestNumbmerIndex;

    for (let i = 0; i < arr.length; i++) {
      if (arr[i] === smallest) {
        smallestNumbmerIndex = i
      }
    }
    arr.splice(smallestNumbmerIndex, 1)
    sortedArray.push(smallest)
  }

  return sortedArray
}

let myArr = [23, 2, 12, 4]
console.log(getSortedArray(myArr)) // console output => [2, 4] , the rest elements get omitted

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

Comments

0

We can use a while loop, or we can store the length of array into a variable before the for loop, so that it will not change:

function findSmallest(numArr) {
  let smallestNumber = numArr[0]

  for (let i = 0; i < numArr.length; i++) {
    if (numArr[i + 1] < smallestNumber) {
      smallestNumber = numArr[i + 1]
    }
  }
  return smallestNumber;
}

function getSortedArray(arr) {
  let sortedArray = []

  // we can store the array length into a variable
  let length = arr.length
  for (j = 0; j < length; j++) {
    let smallest = findSmallest(arr)
    let smallestNumbmerIndex;

    for (let i = 0; i < arr.length; i++) {
      if (arr[i] === smallest) {
        smallestNumbmerIndex = i
      }
    }
    arr.splice(smallestNumbmerIndex, 1)
    sortedArray.push(smallest)
  }

  return sortedArray
}

let myArr = [23, 2, 12, 4]
console.log(getSortedArray(myArr)) 

Comments

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.