কিভাবে জাভা বাবল সর্ট লিখতে হয়
যখন প্রোগ্রামাররা বুদ্বুদ সাজানোর কথা বলে, তখন তারা সেই জলের বুদবুদগুলির কথা বলে না যেগুলি আপনি সম্ভবত আপনার জীবনের কোনো এক সময়ে উড়িয়ে দিয়েছেন। তারা একটি সাজানোর অ্যালগরিদম সম্পর্কে কথা বলছে যা আইটেমগুলির একটি তালিকা অর্ডার করতে ব্যবহৃত হয়।
এই নির্দেশিকায়, আমরা বুদবুদের প্রকার এবং তারা কীভাবে কাজ করে সে সম্পর্কে কথা বলতে যাচ্ছি। আমরা জাভা ব্যবহার করে একটি বুদ্বুদ সাজানোর কাজ চালিয়ে যাব যাতে আপনি বুঝতে পারেন কিভাবে এই অ্যালগরিদম কোডে অনুবাদ করে। আর কোনো ঝামেলা ছাড়াই, চলুন জাভা বুদবুদ সাজানোর মধ্যে ডুব দিই!
জাভা বাবল সর্ট কি?
একটি বুদ্বুদ সাজানোর একটি অ্যালগরিদম যা সন্নিহিত উপাদানগুলির তুলনা করে এবং ভুল ক্রমে প্রদর্শিত হলে সেগুলিকে অদলবদল করে মানগুলিকে সাজায়৷
তালিকার প্রতিটি আইটেম সঠিকভাবে অর্ডার না করা পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি হয়। বুদবুদ সাজানো একটি তালিকা বাছাই করতে ব্যবহার করা যেতে পারে ঊর্ধ্বমুখী বা অবরোহী ক্রমে।
অ্যালগরিদম ক্লাসে বুদ্বুদ সাজানো প্রথম পড়ানো হয়। এটি এই কারণে যে সেগুলি অন্যান্য ধরণের তুলনায় বোঝা সহজ, যেমন একটি সন্নিবেশ বাছাই বা একটি নির্বাচন সাজানোর, এবং অ্যালগরিদম সাজানোর জন্য একটি ভাল ভূমিকা প্রদান করে৷
বুদ্বুদ সাজানো সবচেয়ে কার্যকর যখন ডেটা ইতিমধ্যে প্রায় সাজানো হয়। যাইহোক, যদি আপনার ডেটা মোটেই সাজানো না হয়, তবে অন্য ধরণের সাজানো আরও কার্যকর হতে পারে।
বাবল সর্ট কিভাবে কাজ করে?
জাভা বুদবুদ সাজানোর জন্য কোড লেখা শুরু করার আগে, আমাদের প্রথমে বুঝতে হবে কিভাবে এই অ্যালগরিদমটি বাস্তবে প্রয়োগ করা হয়।
নিম্নলিখিত তালিকা বিবেচনা করুন:
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগদানের পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।
5 | 9 | 2 | 7 |
আমাদের বুদবুদ বাছাই শুরু হয় আমাদের তালিকার প্রথম এবং দ্বিতীয় উপাদানের তুলনা করে।
যদি প্রথম উপাদানটি দ্বিতীয় উপাদানের চেয়ে বড় হয়, তাহলে এই উপাদানগুলি অবস্থান অদলবদল করে। এই ক্ষেত্রে, 5 9 এর বেশি নয়, তাই উপাদানগুলি তাদের একই জায়গায় থাকে।
তারপর, আমাদের বাছাই আমাদের তালিকার পরবর্তী দুটি আইটেমের তুলনা করবে। 9 হল 2 এর থেকে বড়, এবং তাই এই দুটি সংখ্যা অদলবদল করে:
5 | 2 | 9 | 7 |
তালিকার প্রতিটি আইটেমের তুলনা না হওয়া পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি হয়। এই ক্ষেত্রে, সম্পাদন করার জন্য আরও একটি তুলনা আছে:9 কি 7 এর চেয়ে বড়? 9 হল 7 এর থেকে বড়, তাই এই সংখ্যাগুলি অদলবদল করে:
5 | 2 | 7 | 9 |
আমাদের তালিকা প্রায় আদেশ করা হয়. একবার প্রতিটি আইটেমের তুলনা করা হয়ে গেলে, প্রতিটি উপাদান সাজানো না হওয়া পর্যন্ত বুদ্বুদ সাজানো আবার শুরু হবে।
5 হল 2 এর থেকে বড়, এবং তাই এই সংখ্যাগুলি অদলবদল করে।
2 | 5 | 7 | 9 |
আমাদের তালিকা এখন সঠিকভাবে আদেশ করা হয়. আমাদের বুদবুদ বাছাই সংখ্যার তুলনা করতে থাকবে যতক্ষণ না এটি তালিকার শেষে আসে এবং তারপর এটি বন্ধ হয়ে যাবে। এটি একটি বুদবুদ সাজানোর সব আছে. এটি একটি সহজ অ্যালগরিদম ব্যবহার করার জন্য একবার আপনি এটি হ্যাং হয়ে গেলে৷
৷কিভাবে জাভা বাবল সর্ট লিখতে হয়
তত্ত্ব জানা এক জিনিস কিন্তু আপনি এখানে এসেছেন জাভা বাবল সর্ট সম্পর্কে জানতে। জাভাতে বুদ্বুদ সাজানোর পদ্ধতি কীভাবে প্রয়োগ করা যায় তা নিয়ে আমরা আলোচনা করব।
দুটি ধরনের বুদ্বুদ প্রকার রয়েছে:
- স্ট্যান্ডার্ড বাবল বাছাই
- অপ্টিমাইজ করা বাবল বাছাই
স্ট্যান্ডার্ড বুদ্বুদ সাজানো সমস্ত সম্ভাব্য তুলনা করে এমনকি যদি একটি অ্যারে সাজানো হয়। এটি বুদবুদ সাজানোর জন্য যে সময় লাগে তা বাড়ায়। এই সাজানোর কম দক্ষ করে তোলে.
অপ্টিমাইজ করা বুদবুদ সাজানো একটি তালিকা একটি অতিরিক্ত পরিবর্তনশীল ব্যবহার করে সাজানো হয়েছে কিনা তা ট্র্যাক রাখে। এটি আমাদের তালিকা সাজানোর সাথে সাথে আমাদের সাজানোর বন্ধ করতে দেয়।
একটি স্ট্যান্ডার্ড বাবল সাজানোর মাধ্যমে শুরু করা যাক।
স্ট্যান্ডার্ড বাবল বাছাই
শুরু করতে, আমরা আমাদের কোডে অ্যারে লাইব্রেরি আমদানি করতে যাচ্ছি। কনসোলে আমাদের সাজানো সংখ্যার তালিকা প্রিন্ট করতে আমরা পরে আমাদের কোডে এটি ব্যবহার করব:
import java.util.Arrays;
এখন এটি পথের বাইরে, আমরা আমাদের অ্যালগরিদম লিখতে শুরু করতে পারি।
আমরা BubbleSort নামক একটি ক্লাস সংজ্ঞায়িত করে শুরু করব যা আমাদের জাভা প্রোগ্রামের কোড সঞ্চয় করে এবং একটি ফাংশন যা আমাদের সাজানোর কাজ করে:
class BubbleSort { void sortNumbers(int array[]) { int size = array.length; for (int item = 0; item < size - 1; item++) { for (int j = 0; j < size - item - 1; j++) { if (array[j] > array[j + 1]) { int temporary = array[j]; array[j] = array[j + 1]; array[j + 1] = temporary; } } } } }
আমরা sortNumbers
নামে একটি ফাংশন ঘোষণা করেছি যা একটি পরামিতি হিসাবে একটি পরিবর্তনশীল গ্রহণ করে। এই ফাংশনটি আমাদের নির্দিষ্ট করা সংখ্যার তালিকার আকার গণনা করে শুরু হয়।
একবার এটি গণনা করা হয়ে গেলে, লুপের জন্য একটি আরম্ভ করা হয়। এই লুপ আমাদের অ্যারের প্রতিটি আইটেম মাধ্যমে হাঁটা. আমরা লুপের জন্য আরেকটি আরম্ভ করি যা আমাদের অ্যারের প্রতিটি আইটেমের তুলনা করতে দেয়।
তালিকার বাম দিকের আইটেমটি ডানদিকের সংখ্যার চেয়ে বড় হলে, মানগুলি অদলবদল করা হয়। অন্যথায়, কিছুই হবে না।
আমরা "টেম্পোরারি" নামক একটি ভেরিয়েবলে বাম দিকের মান নির্ধারণ করে এই অদলবদলটি সম্পাদন করি। আমরা তুলনার বাম দিকের মানটিকে ডানদিকের মান নির্ধারণ করি। তারপর, বাম দিকের মানটিকে অস্থায়ী ভেরিয়েবলের মান নির্ধারণ করা হয়।
যদি 6 এবং 5 তুলনা করা হয়, তাহলে তাদের অদলবদল করা হবে। সুতরাং, আমাদের তালিকা প্রদর্শিত হবে:6, 5।
আমাদের প্রোগ্রাম এখনও কিছু করে না। আমরা এমন একটি প্রধান প্রোগ্রাম লিখিনি যা আমাদের ফাংশনকে কল করে এবং এটিকে সাজানোর জন্য একটি তালিকা দেয়।
নিচের কোডটি sortNumbers
এর নিচে যোগ করুন আপনার কোডে ফাংশন:
public static void main(String args[]) { int[] toSort = { 5, 9, 2, 7 }; BubbleSort sortingAlgorithm = new BubbleSort(); sortingAlgorithm.sortNumbers(toSort); System.out.println(Arrays.toString(toSort)); }
আমরা toSort নামক একটি ভেরিয়েবল ঘোষণা করেছি যা আমরা যে মানগুলি সাজাতে চাই তার তালিকা সংরক্ষণ করে। আমরা তারপরে বাবলসোর্ট ক্লাসের একটি উদাহরণ ঘোষণা করেছি যাকে sortingAlgorithm বলা হয়, যা আমরা কোডের পরবর্তী লাইনে sortNumbers
কল করতে ব্যবহার করি। ফাংশন যখন এই ফাংশনটি বলা হয়, আমাদের তালিকা সাজানো হয়।
অবশেষে, আমরা Arrays.toString()
ব্যবহার করি আমাদের তালিকাকে একটি স্ট্রিংয়ে রূপান্তর করার পদ্ধতি যাতে আমরা এটিকে কনসোলে প্রিন্ট করতে পারি। আমাদের কোড ফিরে আসে:
[2, 5, 7, 9]
আমাদের এখন একটি সাজানো অ্যারে আছে!
অপ্টিমাইজ করা বাবল বাছাই
আমাদের কোড আরো দক্ষ করার একটি উপায় আছে. এই মুহূর্তে, আমাদের বাছাই চলতে থাকে যতক্ষণ না এটি সমস্ত সম্ভাব্য তুলনা করে। এর মানে হল যে আমাদের অ্যারে সাজানো হলেও, সেই তুলনা সম্পূর্ণ না হওয়া পর্যন্ত সাজানো চলবে।
আমরা আমাদের কোডে একটি নতুন ভেরিয়েবল যোগ করে এই আচরণ প্রতিরোধ করতে পারি। তালিকা অদলবদল করা হলে এটি আমাদের সাজানোর কাজ বন্ধ করার অনুমতি দেবে। আমাদের sortNumbers
-এ এই ভেরিয়েবল যোগ করা যাক আগের থেকে ফাংশন:
class BubbleSort { void sortNumbers(int array[]) { int size = array.length; for (int item = 0; item < size - 1; item++) { boolean hasSwapped = false; for (int j = 0; j < size - item - 1; j++) { if (array[j] > array[j + 1]) { int temporary = array[j]; array[j] = array[j + 1]; array[j + 1] = temporary; hasSwapped = true; } } if (hasSwapped == false) { break; } } } }
আমরা আমাদের কোডে তিনটি পরিবর্তন করেছি। আমাদের প্রথম ফর লুপের ভিতরে আমরা "hasSwapped" নামক একটি ভেরিয়েবল ঘোষণা করেছি। এই পরিবর্তনশীল একটি অদলবদল করা হয়েছে কিনা ট্র্যাক রাখে. ডিফল্টরূপে, এই ভেরিয়েবলটি "false" এ সেট করা থাকে। যদি একটি অদলবদল করা হয়, এই ভেরিয়েবলের মান "সত্য" সেট করা হয়।
আমাদের for লুপের শেষে, hasSwapped সমান মিথ্যা কিনা তা পরীক্ষা করার জন্য আমরা একটি if স্টেটমেন্ট যোগ করেছি। যদি কোন অদলবদল করা না হয়, অ্যারে সাজানো হয়। যদি hasSwapped সমান মিথ্যা হয় তাহলে আমরা আমাদের লুপকে কার্যকর করা থেকে বিরত রাখতে "ব্রেক" কীওয়ার্ড ব্যবহার করি।
আসুন আমরা আগে যে মূল প্রোগ্রামটি লিখেছিলাম সেটি ব্যবহার করে আমাদের কোড রান করি এবং দেখুন কি হয়:
[2, 5, 7, 9]
আমাদের তালিকা সাজানো হয়েছে, কিন্তু এই সময় আমাদের অ্যালগরিদম আরো দক্ষ. যদি আমরা সাজানোর জন্য আরও মান সহ একটি বৃহত্তর তালিকা ব্যবহার করি তবে এই অ্যালগরিদমের উচ্চতর কর্মক্ষমতা আরও পরিষ্কার হবে। এটাই, আপনি জাভাতে একটি অপ্টিমাইজড বাবল সাজানোর কথা লিখেছেন!
উপসংহার
বুদবুদ সাজানোর তালিকাগুলিকে আরোহী বা অবরোহ ক্রমে সাজানোর জন্য ব্যবহার করা হয়। তারা সন্নিহিত মানগুলি তুলনা করে কাজ করে এবং যদি তারা ভুল ক্রমে থাকে তবে তাদের অদলবদল করে।
দুই ধরনের বুদ্বুদ সাজানো আছে:স্ট্যান্ডার্ড এবং অপ্টিমাইজড। স্ট্যান্ডার্ড বাবল সর্টগুলি পূর্বনির্ধারিত সংখ্যক অদলবদল সম্পাদন করে যেখানে অপ্টিমাইজ করা বাবল সর্টগুলি শুধুমাত্র একটি তালিকা সাজানো না হওয়া পর্যন্ত বাছাই করতে থাকে।
এখন আপনি একজন বিশেষজ্ঞের মতো জাভাতে বুদবুদ সাজানোর লেখা শুরু করতে প্রস্তুত!