Sort array until 3 elements are in order, and leave the rest as they are [closed]

Solution for Sort array until 3 elements are in order, and leave the rest as they are [closed]
is Given Below:

I’m trying to sort an array until the first 3 elements are in the correct order and immediately return the resulting array.
For example if given the array

const arr = [77, 9, 3, 5, 1] would return [1, 3, 5, 77, 9]
I tried using the default sort method but I couldn’t figure out how to stop it when 3 elements are in the correct order.

I’ve put numbers here for simplicity. The elements I need to sort are not numbers.

Any help is much appreciated.
Thanks.

well there are couple of ways you can do it, here is a simple solution.

arr = [77, 9, 3, 5, 1];
arr2 =[];
arr2.push(...arr.splice(arr.indexOf(Math.min(...arr)), 1));
arr2.push(...arr.splice(arr.indexOf(Math.min(...arr)), 1));
arr2.push(...arr.splice(arr.indexOf(Math.min(...arr)), 1));
result = [...arr2,...arr];

this will take 3 smallest element from arr and push it to second array and then you can combine 2 arrays to get your desired result.

Since we only need the first three items to be sorted, we can use a backwards bubble sort algo.

  • After three passes the first three items will always be the smallest.

Here’s what it looks like in our case:

let arr = [77, 9, 3, 5, 1];

// Using a bubble sort starting from the back,
// we know that after 3 passes the first three items will be sorted

for (let i = 0; i < 3; i++) {
    for (let j = arr.length - 1; j !== 0; j--) {
        let current = arr[j];
        let behind = arr[j - 1];

        if (current < behind) {
            arr[j] = arr[j - 1];
            arr[j - 1] = current;
        }
    }
}

console.log(arr);

More on bubble sort.