সমস্যা বিবরণ
ইন্টিজার অ্যারে দেওয়া আছে। সব অড নম্বর আগে, তারপর সব ইভেন নম্বর সর্ট করতে হবে। অড/ইভেন গ্রুপের ভেতরে অর্ডার গুরুত্বপূর্ণ নয়।
ইনপুট: [0, 2, 4, 6, 8, 0, 1, 3, 5, 7, 9, 1]
আউটপুট: [1, 3, 5, 7, 9, 1, 0, 2, 4, 6, 8, 0]
সমাধান
const arr = [0, 2, 4, 6, 8, 0, 1, 3, 5, 7, 9, 1];
const sortOddEven = (arr = []) => {
let i = 0, j, temp;
while (i < arr.length - 1) {
j = i;
while (!(arr[j] % 2) && arr[j + 1] % 2) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
if (!j) break;
j--;
}
i++;
}
};
sortOddEven(arr);
console.log(arr);
আউটপুট
[ 1, 3, 5, 7, 9, 1, 0, 2, 4, 6, 8, 0 ]
ব্যাখ্যা
- বাবল সর্টের ভেরিয়েন্ট: ইভেন নম্বর (arr[j]%2===0) এবং এর পর অড নম্বর (arr[j+1]%2===1) পাওয়া গেলে স্ব্যাপ করা হয়।
- সোয়াপের পর
j--দিয়ে পেছনে যেতে থাকে যাতে অড নম্বর যথাসম্ভব আগে চলে যায়। - ইন-প্লেস সর্টিং, O(n²) ওর্স্ট কেস।
সিম্পলার ভার্সন (ES6+)
const sortOddEvenSimple = arr =>
[...arr.filter(x => x % 2), ...arr.filter(x => x % 2 === 0)];