Не произвелась пузырьковая сортировка в JavaScript
Помогите, пожалуйста. Нужно реализовать пузырьковую сортировку в JS, есть генератор массива чисел и вроде как вписал из просторов рунета скрипт с сортировкой, но он не сработал и полагаю из-за того, что нет связи с массивом.
const diap = [1 , 3 , 5 , 7 , 9 , 11, 13, 15, 16, 18];
function getMeSomeShit(shitLength) {
if (!(typeof shitLength === 'number' || typeof shitLength === 'bigint')) {
console.error("a-ta-ta give a number");
return;
}
const arrayToFulfillRandomNumbers = [];
for (let numberCounter = 0; numberCounter < shitLength; numberCounter++) {
arrayToFulfillRandomNumbers.push(getRandomShit())
}
return arrayToFulfillRandomNumbers;
}
function getRandomShit() {
return diap[Math.floor(Math.random() * diap.length)];
}
function bubbleSort(getMeSomeShit) {
let swapped;
do {
swapped = false;
console.log(getMeSomeShit);
getMeSomeShit.forEach((item, index) => {
if (item > getMeSomeShit[index + 1]) {
let temp = item;
getMeSomeShit[index] = getMeSomeShit[index + 1];
getMeSomeShit[index + 1] = temp;
swapped = true;
}
})
} while (swapped);
}
console.log(getMeSomeShit(6));
Ответы (3 шт):
Автор решения: Anastasiya
→ Ссылка
Мне кажется, дело все в том, что swapped становится true после одного обмена. А необходимо отсортировать все элементы массива. Я бы сделала двойной вложенный цикл, типа
for(let i=0; i < array.length - 1; i++) {
for(let j=0; j<array.length-i-1; j++) {
if(array[j] >array[j+1]){
let temp = array[j] ;
array[j] = array[j+1];
array[j+1]=temp;
}
}
}
return array;
Пс за js ссори, пишу на java
Автор решения: DiD
→ Ссылка
const diap = [1, 3, 5, 7, 9, 11, 13, 15, 16, 18];
function getMeSomeShit(shitLength) {
if (!(typeof shitLength === 'number' || typeof shitLength === 'bigint')) {
console.error("a-ta-ta give a number");
return;
}
const arrayToFulfillRandomNumbers = [];
for (let numberCounter = 0; numberCounter < shitLength; numberCounter++) {
arrayToFulfillRandomNumbers.push(getRandomShit())
}
return arrayToFulfillRandomNumbers;
}
function getRandomShit() {
return diap[Math.floor(Math.random() * diap.length)];
}
function bubbleSort(getMeSomeShit) {
let swapped;
do {
swapped = false;
getMeSomeShit.forEach((item, index) => {
if (!index) return;
if (item < getMeSomeShit[index - 1]) {
[getMeSomeShit[index], getMeSomeShit[index - 1]] =
[getMeSomeShit[index - 1], getMeSomeShit[index]];
swapped = true;
}
})
} while (swapped);
return getMeSomeShit;
}
console.log(bubbleSort(getMeSomeShit(6)));
Автор решения: Aziz Umarov
→ Ссылка
Вот так думаю сделать будет чуток по современному.
let diap = [1, 3, 5, 7, 9, 11, 13, 15, 16, 18];
diap = diap.sort(_ => Math.random() - 0.5); // перемешиваем
function bubbleSort(array) {
for(let i = 0; i < array.length - 1; i++) {
for(let j = 0; j < array.length - i - 1; j++) {
if(array[j]>array[j+1]){
[array[j], array[j+1]] = [array[j+1], array[j]];
}
}
}
return array;
}
console.log(diap);
console.log(bubbleSort([...diap]));