সিলেকশন সোর্ট হলো একটি সর্টিং অ্যালগরিদম যা অ্যারেতে থেকে সবচেয়ে ছোট নম্বর খুঁজে বের করে সেটিকে প্রথম পজিশনে রাখে। পরবর্তী যেটি ট্রাভার্স হবে সেটি সেটি পজিশনের পরবর্তী ইনডেক্স থেকে শুরু হবে যেখানে ছোট নম্বরটি রাখা হয়েছিল।
একটি উদাহরণ দিয়ে বিষয়টি পরিষ্কার করি।
আমাদের একটি অ্যারে আছে {6, 3, 8, 12, 9}। এই অ্যারেতে সবচেয়ে ছোট এলিমেন্ট ৩। তাই ৩ কে প্রথম পজিশনে রাখব, এরপর অ্যারেটি দেখাবে {3, 6, 8, 12, 9}। এখন আবার সবচেয়ে ছোট নম্বর খুঁজব কিন্তু এইবার ৩ কে বিবেচনা করব না কারণ সেটি তার জায়গায় আছে। পরবর্তী সবচেয়ে ছোট এলিমেন্ট ৬, সেটিকে দ্বিতীয় পজিশনে রাখা এবং এভাবেই চলতে থাকবে যতক্ষণ না অ্যারেটি সোর্ট হয়।
সিলেকশন সোর্ট অ্যালগরিদমের 작동방식−
সিলেকশন সোর্ট অ্যালগরিদম নিচের ধাপগুলো অনুসরণ করে:
একটি অ্যারে নেই {20, 12 , 23, 55 ,21}
অ্যারের প্রথম এলিমেন্টকে মিনিমাম ধরুন।
Minimum = 20মিনিমামকে পরবর্তী এলিমেন্টের সাথে তুলনা করুন, যদি সেটি মিনিমামের চেয়ে ছোট হয়, তবে সেটিকে মিনিমাম ধরুন। অ্যারের শেষ পর্যন্ত এটা করুন।
১২ এর সাথে তুলনা: 20 > 12, minimum = 12
২৩ এর সাথে তুলনা: 12 < 23, minimum = 12
৫৫ এর সাথে তুলনা: 12 < 55, minimum = 12
২১ এর সাথে তুলনা: 12 < 21, minimum = 12মিনিমামকে অ্যারের প্রথম পজিশন (ইনডেক্স ০) এ রাখুন।
Array = {12, 20 ,23, 55, 21}পরবর্তী ইটারেশনে, প্রথম আনসোর্টেড এলিমেন্ট থেকে সোর্টিং শুরু করুন অর্থাৎ যেখানে মিনিমাম রাখা হয়েছিল তার পরবর্তী এলিমেন্ট থেকে।
Array = {12, 20 ,23, 55, 21}
২০ থেকে সার্চ শুরু (মিনিমাম রাখা জায়গার পরবর্তী এলিমেন্ট)।
Iteration 2:
Minimum = 20
২৩ এর সাথে তুলনা: 20 < 23, minimum = 20
৫৫ এর সাথে তুলনা: 20 < 55, minimum = 20
২১ এর সাথে তুলনা: 20 < 21, minimum = 20
মিনিমাম জায়গায় আছে, কোনো পরিবর্তন নেই,
Array = {12, 20 ,23, 55, 21}
Iteration 3:
Minimum = 23.
৫৫ এর সাথে তুলনা: 23 < 55, minimum = 23
২১ এর সাথে তুলনা: 23 > 21, minimum = 21
মিনিমাম ইনডেক্স ২-এ সরিয়ে দেওয়া
Array = {12, 20, 21, 55, 23}
Iteration 4:
Minimum = 55
২৩ এর সাথে তুলনা: 23 < 55, minimum = 23
মিনিমাম ইনডেক্স ৩-এ সরানো
Array = {12, 20, 21, 23, 55}
উদাহরণ
#include <stdio.h> int main() { int arr[10]={6,12,0,18,11,99,55,45,34,2}; int n=10; int i, j, position, swap; for (i = 0; i < (n - 1); i++) { position = i; for (j = i + 1; j < n; j++) { if (arr[position] > arr[j]) position = j; } if (position != i) { swap = arr[i]; arr[i] = arr[position]; arr[position] = swap; } } for (i = 0; i < n; i++) printf("%d\t", arr[i]); return 0; }
আউটপুট
0 2 6 11 12 18 34 45 55 99