Bangla

সর্টিংঃ বাবল সর্ট অ্যালগরিদম

বাবল সর্ট অ্যালগরিদম

সর্টিং মানেই যে কোন কিছু সাজানো, তা আমরা কম বেশি সবাই জানি। কম্পিউটার সায়েন্সের একটি গুরুত্বপূর্ণ বিষয় হচ্ছে অ্যালগরিদম, আর এই অ্যালগরিদমের মধ্যে সর্টিং অনেক গুরুত্বপূর্ণ একটি অংশ।

যতগুলো সর্টিং অ্যালগরিদম আছে, তার মধ্যে আমাদের কাছে সিলেকশন সর্টিং সহজ মনে হলেও, অনেকের কাছেই এই বাবল সর্ট (Bubble Sort) অনেক সহজ মনে হয়। আসলে সহজ মনে হবারই কথা, কেননা বাবল সর্ট অ্যালগরিদম আসলেই অনেক সহজ একটি সর্টিং অ্যালগরিদম।

বাবল সর্ট অ্যালগরিদম আমার কাছে বেশ মজা লাগে। তুমি প্রথম থেকে শেষ পর্যন্ত পাশাপাশি দুটি দুটি করে সংখ্যা নিতে থাকো, যদি দেখো আগের সংখ্যা পরের সংখ্যা থেকে বোড়, তাহলে অদলবদল করো। এই কাজ তোমাকে n সংখ্যক বার করতে হবে, কেননা বাবল সর্ট অ্যালগরিদম কিন্তু Ο(n2) সময় লাগাবে।

বাবল সর্ট অ্যালগরিদমে Ο(n2) সময় লাগে, এর কারণ হচ্ছে প্রথম বার যখন তুমি বাম থেকে ডানে যাবে, তখন সবচেয়ে বড়টি অবশয়ই একদম ডান মাথায় গিয়ে পৌঁছাবে। পরের বার দ্বিতীয় বড়টি ঠিক জায়গায় যাবে, এভাবে প্রতিবার একোটি একোটি করে সংখ্যা সঠিক স্থানে যাবে। তাই n বার এই কাজ করলে সব সংখ্যা সঠিক জায়গায় চলে যাবে।

বাবল সর্ট কিভাবে কাজ করে?

বাবল সর্ট অ্যালগরিদম কিভাবে কাজ করে তা বোঝার জন্য চলো প্রথমেই একোতি আনসর্টেড অ্যারে নেওয়া যাক। যাহেতু বাবল সর্ট Ο(n2) সময় নেই, তাই চেস্টা করবো যত ছোট বা কম ডেটা নেওয়া যায়।

বাবল সর্ট শুরু হয় প্রথম দুটি আইতেমের মধ্যে তুলনার মাধ্যমে। আর এই তুলনার মাধ্যমে খুজে বের করা হয় সব থেকে বড় আইটেম।

আমাদের নেওয়া অ্যারেতে শুরুতেই আছে ১৪ এবং ৩৩। যেহেতু ৩৩, ১৪ থেকে বড় তাই এখানে আগে থেকেই সর্টেড আছে, অর্থাৎ কোন পরিবর্তন হবে না। এখন আমাদেরকে ৩৩ এবং ২৭ এর মধ্যে তুলনা করে দকেহতে হবে কে বড়, আর কে ছোট।

এখানে আমরা দেখছি যে, ২৭ থেকে ৩৩ বড়, আর এই কারনেই ভ্যালু দুটি অদলবদল করতে হবে।

অদলবদলের পর আমাদের অ্যারে দেখতে হবে এমনঃ

এবার আমরা যদি ৩৩ এবং ৩৫ এর মধ্যে তুলনা করি, তাহলে দকেহব যে এরা আগে থেকেই সর্টেড আছে, কেননা ৩৫ তো ৩৩ থেকে বড়ই।

তারপর আবার আমরা পরের দুটি ভ্যালু এর মধ্যে তুলনা করবো, আর এক্ষেত্রে আমার ভ্যালু হচ্ছে ১০ এবং ৩৫।

আমরা সবাই জানি যে ৩৫ থেকে ১০ অনেক ছোট একোটি সংখ্যা, এর মানে সংখ্যা দুটি আমাদের এই অ্যারেতে সর্টেড নেই।

এখন বাবল সর্টের নিয়ম অনুযায়ী ভ্যালু দুটির অবস্থান অদলবদল করতে হবে, মানে ১০ কে নিয়ে আসতে হবে ৩৫ এর স্থানে। এভাবে আমাদের প্রথম ধাপ শেষ করার পর অ্যারে দেখতে হবে অনেকটা নিচের মতঃ

এবার তোমাকে আবার প্রথম থেকে শুরু করে দ্বিতীয় ধাপ কমপ্লিট করতে হবে, আর তখন আমাদের অ্যারে হবে এই রকমঃ

তুমি খেয়াল করেছ কি না জানি না। আমরা প্রতিবার বাবল সর্ট অ্যাপ্লাই করার পর, যে কোন একটি সংখ্যা সবার শেষে চলে যাচ্ছে। অর্থাৎ শুরুর দিকে ছোট সংখ্যা গুলো আনসর্টেড থাকলেও শেষের দিকে বোড় সংখ্যা গুলো কিন্তু ঠিকই সর্টেড আছে।

এবার আবারো আমরা তৃতীয় বারের জন্য বাবল সর্ট অ্যাপ্লাই করবো, কেননা আমাদের অ্যারে এখনো পুরোপুরি সর্টেড হয়নি।

এভাবে একোটির পর একটি সর্ট করার পর যখন আর অদলবদল করার জায়গা থাকবে না, তখন আমাদের অ্যারে দেখবে হবে নিচের মতঃ

এখানে মনে রাখতে হবে যে, আমরা বাবল সর্ট ততক্ষন চালাতে থাকবো, যতক্ষন পুরপুরি সর্তেড লিস্ট পাবো।

আশাকরি বাবল সর্ত এখন তোমার কাছে অন্যদের মতই অনেক সহজ মনে হচ্ছে। তবে আমার কাছে কিন্তু ঐ সিলেকশন সর্ট অ্যালগরিদমই সহজ লাগে। 🙂

আচ্ছা, এবার তাহলে বাবল সর্ট অ্যালগরিদম দেখে চেষ্টা ক্র পুরোপুরি বুঝেছো কি না?

বাবল সর্ট তুমি চাইলে যে কোন ল্যাঙ্গুয়েজ দিয়েই ইমপ্লিমেন্ট করতে পারো, কেননা এটা ইমপ্লিমেন্ট করা খুব সহজ। নিচে যে কোড দিয়েছি, তুমি চাইলে এই কোডে কিছু অপটিমাইজেশন করতে পারো। যেমনঃ এমন হতে পারে যে n বারের আগেই অ্যারেটি সর্টেড হয়ে গেছে, সে ক্ষেত্রে তুমি আগেই লু থেকে বের হয়ে যেতে পারো।

আবার প্রতিবার তোমার সব জোড় সংখ্যা যাচাই করার দরকার নেই, কারণ i সংখ্যকবার চললে তুমি জানবে যে i টি সংখ্যা ঠিক জায়গায় চলে গেছে। তুমি এভাবে কিছু অপটিমাইজেশন করতে পারো, কিন্তু যতই অপটিমাইজেশন করো কেন, এই অ্যালগরিদমের worst কেইস এ Ο(n2) সময় লাগবেই। আচ্ছা তোমরা কি কেউ সেই worst কেইস্টি বের করতে পারবে?

সহজ কোডঃ

সি দিয়ে বাবল সর্ট ইমপ্লিমেন্টশনের সম্পূর্ণ কোডঃ

আউটপুরঃ Sorted array: 11 12 22 25 34 64 90

আমার প্রিয় পাইথন দিয়ে বাবল সর্ট ইমপ্লিমেন্টশনের সম্পূর্ণ কোডঃ

আউটপুটঃ Sorted array: 11 12 22 25 34 64 90

আশাকরি বাবল সর্ট অ্যালগরিদম কি, কিভাবে কাজ করে, কিভাবে ইমপ্লিমেন্ট করতে হয়, তা তুমি ভালো করেই বুঝেছো। আর যদি না বুঝো তবে পুরো লেখা আরো কএয়কবার পড়ো, বিশেষ করে উদাহরণের অংশটুকু।

Shameem Reza
I am Father of a Son, blessed with a pious wife. I am a Web and Mobile Apps Developer, WordPress Ninja and Blogger. I love to work with PHP, JavaScript, VueJs and other web based technologies.
You may also like
বাইনারি সার্চ ট্রি
বাইনারি সার্চ ট্রি
হীপ বা প্রায়োরিটি কিউ
হীপ বা প্রায়োরিটি কিউ অ্যালগোরিদম

Leave Your Comment

Your Comment*

Your Name*
Your Webpage