কম্পিউটার টিউটোরিয়াল

C প্রোগ্রাম: রিকার্সিভ বাবল সর্ট


বাবল সর্ট হলো সবচেয়ে সহজ সর্টিং অ্যালগরিদমগুলোতে একটি যা অ্যাডজেসেন্ট এলিমেন্টগুলো তুলনা করে ডেটা সর্ট করে। সকল এলিমেন্ট ফেজ-wise তুলনা হয়। প্রথম ফেজে সবচেয়ে বড় মান শেষে চলে আসে, দ্বিতীয় ফেজে দ্বিতীয় বড় এলিমেন্ট সেকেন্ড লাস্ট পজিশনে চলে আসে এবং এভাবে পুরো লিস্ট সর্ট হয়।

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

  • int arr[5]= { 5,4,2,1,3 };

  • int i, j ;

  • ইনডেক্স i=0 থেকে i<array size পর্যন্ত ট্রাভার্স করুন

    • ইনডেক্স j=0 থেকে array size - i - 1 পর্যন্ত ট্রাভার্স করুন

    • যদি arr[i]>arr[j] হয় তবে arr[i] এবং arr[j] সোয়াপ করুন

  • শেষ

রিকার্সিভ বাবল সর্ট

  • যদি অ্যারে লেন্থ ১ হয় তবে রিটার্ন করুন

  • অ্যারেটি একবার ট্রাভার্স করে সবচেয়ে বড় এলিমেন্টটি শেষে ফিক্স করুন

  • লাস্ট এলিমেন্ট বাদে বাকি অ্যারেটির জন্য স্টেপ ২ রিকার্সিভলি করুন

উদাহরণ

ইনপুট − Arr[] = { 5,7,2,3,1,4 }; length=6

আউটপুট − সর্টেড অ্যারে: 1 2 3 4 5 7

ব্যাখ্যা −

প্রথম পাস 5 7 2 3 1 4 → swap → 5 2 7 3 1 4 5 2 7 3 1 4 → swap → 5 2 3 7 1 4 5 2 3 7 1 4 → swap → 5 2 3 1 7 4 5 2 3 1 7 4 → swap → 5 2 3 1 4 7 দ্বিতীয় পাস 5 2 3 1 4 7 → swap → 2 5 3 1 4 7 2 5 3 1 4 7 → swap → 2 3 5 1 4 7 2 3 5 1 4 7 → swap → 2 3 1 5 4 7 2 3 1 5 4 7 → swap → 2 3 1 4 5 7 তৃতীয় পাস 2 3 1 4 5 7 → swap → 2 1 3 4 5 7 2 1 3 4 5 7 কোনো swap নয় চতুর্থ পাস 2 1 3 4 5 7 → swap → 1 2 3 4 5 7 1 2 3 4 5 7 এর পরের ইটারেশনগুলোতে কোনো swap নয়

ইনপুট − Arr[] = { 1, 2, 3, 3, 2 };

আউটপুট − সর্টেড অ্যারে: 1 2 2 3 3

ব্যাখ্যা −

প্রথম পাস 1 2 3 3 2 → swap → 1 2 3 2 3 1 2 3 2 3 → swap → 1 2 2 3 3 1 2 2 3 3 কোনো swap নয় এরপরের ইটারেশনগুলোতে দ্বিতীয় পাস 1 2 2 3 3 কোনো swap নয় এরপরের ইটারেশনগুলোতে

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি

বাবল সর্টের রিকার্সিভ পদ্ধতিতে, বেস কেস হচ্ছে অ্যারে লেন্থ = ১। অন্যথায় সিঙ্গল ফর লুপ ব্যবহার করে অ্যারে ট্রাভার্স করুন এবং এলিমেন্টগুলো সোয়াপ করুন।

  • ইনপুট অ্যারে Arr[] এবং এর এলিমেন্ট সংখ্যা হিসেবে length নিন।

  • Function recurbublSort(int arr[], int len) অ্যারে এবং এর লেন্থ নেয় এবং রিকার্সিভলি বাবল সর্ট ব্যবহার করে অ্যারে সর্ট করে।

  • একটি temp ভেরিয়েবল নিন।

  • যদি অ্যারে লেন্থ ১ হয় তবে void রিটার্ন করুন।

  • অন্যথায় সিঙ্গল ফর লুপ ব্যবহার করে অ্যারে ট্রাভার্স করুন এবং প্রতিটি এলিমেন্টের জন্য arr[i]>arr[i+1] হলে সেগুলো সোয়াপ করুন।

  • temp=arr[i], arr[i]=arr[i+1] এবং arr[i+1]=temp সেট করুন।

  • এখন length ১ কমিয়ে দিন কারণ আগের লুপটি সবচেয়ে বড় এলিমেন্টকে শেষ পজিশনে রাখেছে।

  • recurbublSort(arr,len) রিকার্সিভ কল করুন।

  • সকল কল শেষে, যখন len ১ হয়ে যাবে রিকার্সন থেকে বের হয়ে আসবে এবং অ্যারেটি সর্টেড হবে।

  • main-এ সর্টেড অ্যারে প্রিন্ট করুন।

উদাহরণ

#include <stdio.h> void recurbublSort(int arr[], int len){    int temp;    if (len == 1){       return;    }    for (int i=0; i<len-1; i++){       if (arr[i] > arr[i+1]){          temp=arr[i];          arr[i]=arr[i+1];          arr[i+1]=temp;       }    }    len=len-1;    recurbublSort(arr, len); } int main(){    int Arr[] = {21, 34, 20, 31, 78, 43, 66};    int length = sizeof(Arr)/sizeof(Arr[0]);    recurbublSort(Arr, length);    printf("Sorted array : ");    for(int i=0;i<length;i++){       printf("%d ",Arr[i]);    }    return 0; }

আউটপুট

উপরোক্ত কোড রান করলে নিম্নলিখিত আউটপুট জেনারেট হবে

Sorted array: 20 21 31 34 43 66 78

  1. হিপ সর্টের পাইথন প্রোগ্রাম

  2. ককটেইল সর্টের পাইথন প্রোগ্রাম

  3. পাইথন প্রোগ্রাম: বাবল সোর্ট অ্যালগরিদম

  4. পাইথন প্রোগ্রাম: সিলেকশন সোর্ট অ্যালগরিদম