অ্যারে বাছাই করা হল সবচেয়ে সাধারণ অপারেশনগুলির মধ্যে একটি যা একজন জাভা শিক্ষানবিসকে কীভাবে করতে হয় তা জানা উচিত। যদিও অ্যারেগুলি সর্বদা ডেটা সাজানোর সবচেয়ে সুবিধাজনক উপায় নয় এবং এটি বেশিরভাগই ছোট সংখ্যার ক্ষেত্রে প্রযোজ্য, অ্যারে সাজানোর পিছনে ধারণাটি জটিল সফ্টওয়্যার এবং ডেটা বিজ্ঞানে প্রচুর অ্যাপ্লিকেশন রয়েছে। এই পোস্টে, আমরা সন্নিবেশ বাছাই কি তা ঘনিষ্ঠভাবে দেখব। আমরা কিছু উদাহরণ এবং অনুশীলনের সমস্যাগুলি অন্তর্ভুক্ত করেছি যাতে আপনাকে এই ধারণাটি সম্পূর্ণরূপে আটকে রাখতে সহায়তা করে।
সন্নিবেশ বাছাই কি?
মূলত, সন্নিবেশ বাছাই একটি অ্যালগরিদম যা বিকাশকারীরা ছোট সংখ্যার স্ট্রিংগুলিকে সংগঠিত করতে ব্যবহার করে। এটি সমস্ত মানকে দুটি স্ট্যাকের মধ্যে বিভক্ত করে - একটি সাজানো এবং একটি সাজানো না করা। একের পর এক, "বিন্যাস না করা" স্ট্যাকের সংখ্যাগুলি বাছাই করা হয় এবং সঠিক ক্রমে রাখা হয়৷ আসুন ইনপুট এবং সন্নিবেশ সাজানোর আউটপুটটি ঘনিষ্ঠভাবে দেখি:- ইনপুট: সাজানো না হওয়া সাংখ্যিক উপাদান সহ একটি অ্যারে A: A[0,1, n, n-2...]।
- আউটপুট: একই সংখ্যা ধারণকারী একটি অ্যারে কিন্তু সম্পূর্ণভাবে সাজানো। এটিকে সাধারণত B: B[0]B[1]...B[n-1] বলা হয়।
- সংখ্যাগত বাছাই (ক্রমবর্ধমান): [1, 2, 3, 4, 5]
- সংখ্যাগত বাছাই (হ্রাসমান ক্রম): [5, 4, 3, 2, 1]
- বর্ণানুক্রমিক বাছাই: [a, b, c, d]
সন্নিবেশ সাজানোর তত্ত্ব বোঝা
সন্নিবেশ সাজানোর পিছনে কোডটি অন্বেষণ করার আগে, চলুন অ-প্রযুক্তিগত ভাষা ব্যবহার করে অ্যালগরিদম ভেঙে দেওয়া যাক। যেহেতু আমরা ক্রমবর্ধমান ক্রমে সাজানোর জন্য কোডটি দেখাব, তাই এই পোস্টে ধাপে ধাপে অ্যালগরিদম ব্যাখ্যা করা বোধগম্য। ধাপ 1. একটি সাংখ্যিক মান সাধারণত 10-এর চেয়ে কম কোথায়arr[1]
এবং এর মধ্যে পুনরাবৃত্তি করা। ধাপ 2. পদ্ধতিটি ব্যবহার করে অনুক্রমের পূর্ববর্তী সংখ্যার সাথে আপনি যে উপাদানটি বেছে নিয়েছেন (যা হিসাবে পরিচিত) তার তুলনা করুন । ধাপ 3. যদি সমস্ত উপাদান তাদের উত্তরসূরিদের থেকে ছোট হয়, আপনি একটি বড় মান না পাওয়া পর্যন্ত তুলনাটি পুনরাবৃত্তি করুন। ধাপ 4. একটি অর্ডারকৃত সিকোয়েন্স তৈরি করতে ছোট একটির বাইরে একটি বড় মানের একটি অবস্থান অদলবদল করুন। arr[n]
n
key
sort()
ধাপ 5. প্রক্রিয়াটি পুনরাবৃত্তি করুন যতক্ষণ না আপনি অক্ষরের একটি সাজানো স্ট্রিং পান
আদিম অ্যারে বাছাই
যেহেতু অ্যালগরিদম সবচেয়ে সহজবোধ্য জাভা ক্রিয়াকলাপগুলির মধ্যে একটি, এমনকি সম্পূর্ণ নতুনদেরও এটি বাস্তবায়নে খুব বেশি সমস্যা হওয়ার কথা নয়। এখানে একটি অ্যারে সাজানোর জন্য একটি ধাপে ধাপে নির্দেশিকা রয়েছে৷1. সাজানোর জন্য একটি অ্যারে ঘোষণা করুন
শুরু করার জন্য, আসুন মানগুলির একটি স্ট্রিং তৈরি করি যা আমরা পরে জাভা ব্যবহার করে প্রদর্শন করব। সন্নিবেশ সাজানোর ব্যবহার করতে, আপনাকে একটি অ্যারে তৈরি করতে হবে। এর জন্য, ব্যবহার করুনint[]
int[] arrayA = {10, 14, 20, 30};
2. অ্যালগরিদম বাস্তবায়ন করতে sort_arr ব্যবহার করুন
sort_arr পদ্ধতিটি সন্নিবেশ সাজানোর জন্য সবচেয়ে সাধারণ উপায়গুলির মধ্যে একটি। অনুশীলনে, এটি এই মত দেখায়:
for(int i=0; i< sort_arr.length; ++i){
int j = i;
3. একটি লুপ এবং একটি পুনরাবৃত্তিকারী তৈরি করুন
সন্নিবেশ সাজানোর অ্যালগরিদমে একটি লুপ ব্যবহার করে, বিকাশকারীদের প্রতিটি উপাদানের জন্য যুক্তি পুনরাবৃত্তি করতে হবে না। যদিও লুপ তৈরি করা জটিল বলে মনে হচ্ছে, এটি বেশ সহজ - এখানে একটি উদাহরণ:
for(int i=0; i< sort_arr.length; ++i){
এখন যেহেতু আপনার একটি কার্যকরী লুপ আছে, এটি একটি পুনরাবৃত্তিকারী তৈরি করার সময় যা সমস্ত উপাদান পছন্দসই ক্রমে সাজাতে হবে। এখন থেকে, আমরা পুনরাবৃত্তিকারীকে " j
" হিসাবে উল্লেখ করব।
int j = i;
4. একটি "while loop" তৈরি করা
সন্নিবেশ সাজানোর ক্ষেত্রে, একটি নতুন, সাজানো অ্যারের জন্য একটি "যখন" লুপ অপরিহার্য। একটি আরোহী-ক্রম সন্নিবেশ সাজানোর জন্য এটি সেট আপ করতে, একজন বিকাশকারীকে দুটি শর্ত মেনে চলতে হবে:- j-এর জন্য নির্ধারিত মান 0-এর বেশি হতে হবে
- নির্ধারিত মান সূচকের
j-1
চেয়ে বেশি হওয়া প্রয়োজনj
j
।
5. অ্যারে সাজানো
আপনি while লুপ সেট আপ করার পরে, while লুপের এক বা উভয় শর্ত ব্যর্থ না হওয়া পর্যন্তj
এবং মানগুলি অদলবদল করা হবে। j-1
একইভাবে, ফর লুপের প্রতিটি মানের জন্য সাজানোর পুনরাবৃত্তি করা হবে যতক্ষণ না ফর-লুপ শর্তগুলিও ব্যর্থ হয়। এখানে সন্নিবেশ সাজানোর প্রক্রিয়াটি অনুশীলনে কীভাবে কাজ করে:
int key = sort_arr[j];
sort_arr[j] = sort_arr[j-1];
sort_arr[j-1] = key;
j = j-1;
একটি ArrayList বাছাই
যদিও সন্নিবেশ সাজানোর পিছনে গণিত বোঝা গুরুত্বপূর্ণ, যখন এটি বাস্তব-জীবনের সফ্টওয়্যার বিকাশের ক্ষেত্রে আসে, তখন আপনি আদিম অ্যারেগুলির ক্রমগুলির চেয়ে অনেক বেশি অ্যারেলিস্টগুলিকে বাছাই করবেন৷ এখানে একটি ArrayList বাছাই করার জন্য একটি ধাপে ধাপে নির্দেশিকা রয়েছে:Element
সংগ্রহের অন্তর্গত আইটেমগুলির জন্য একটি নতুন ক্লাস তৈরি করুন ।public class Element { private int id; public Element(int id) { this.id = id; }
- একটি সংগ্রহের মধ্যে, একটি পদ্ধতি আছে
compareTo()
- আমরা দুটি উপাদানের আইডি তুলনা করতে এটি ব্যবহার করব।public int compareTo(Element element) { int res = 0; if (this.id < element.getId()) { res = -1; } if (this.id > element.getId()) { res = 1; } return res; } }
- অ্যালগরিদম প্রয়োগ করুন এবং বস্তুগুলিকে
ArrayList
তুলনা করার পরিবর্তে একটিতে সাজানোর জন্য কিছু লুপ তৈরি করুন।public static void insertionSortArrayList(List<element> list) { for (int j = 1; j < list.size(); j++) { Element current = list.get(j); int i = j-1; while ((i > -1) && ((list.get(i).compareTo(current)) == 1)) { list.set(i+1, list.get(i)); i--; } list.set(i+1, current); } }
ArrayList
নীচে দেখানো হিসাবে আপনি পাশাপাশি আরও উপাদান যোগ করতে পারেন :List<element> list = new ArrayList<>(); // Create elements w/ IDs 0-24 for (int i = 0; i < 25; i++) { list.add(new Element(i)); } // To use insertion sort, shuffle the values Collections.shuffle(list);
- এখন বাছাই করার সময়:
// This helps print values before sorting list.forEach(e -> System.out.print(e.getId() + ", ")); // Sort the list insertionSortArrayList(list); System.out.println(); // Display a sorted array list.forEach(e -> System.out.print(e.getId() + ", "));
- এখন ইনপুট এবং আউটপুট তুলনা করা যাক যাতে আমরা কোন ভুল করিনি। এখানে আমরা একটি উদাহরণ হিসাবে ব্যবহৃত স্ট্রিং তুলনা.
4, 2, 6, 7, 0, 5, 9, 1, 8, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
GO TO FULL VERSION