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

দřen complexity constraint সহ কুইক সার্ট বাস্তবায়ন করার C++ প্রোগ্রাম


কুইক সার্ট ডিভাইড-এন্ড-কনকারের উপর ভিত্তি করে। এই অ্যালগরিদমের গড় সময় জটিলতা O(n log n) কিন্তু বর্জ্য কেস জটিলতা O(n²)। বর্জ্য কেসের সম্ভাবনা কমাতে এখানে কুইক সার্ট র‍্যান্ডমাইজেশন ব্যবহার করে বাস্তবায়ন করা হয়েছে।

অ্যালগরিদম

partition(int a[], int l, int h)

শুরু
   pivot = h
   Index = l
   start = l এবং end = h
   যখন start < end করুন
      যখন a[start] <= pivot এবং start < end করুন
        start = start + 1
      শেষ
      যখন a[end] > pivot করুন
        end = end – 1
      শেষ
      যদি start < end হয় তবে
        a[start] কে a[end]-এর সাথে বদলান
      শেষ
      a[low] = a[end]
      a[end] = pivot
    end ফেরত দিন
শেষ

RandomPivotPartition(int a[], int l, int h)

শুরু
   n = rand()
   pivot = l + n % (h - l + 1);
   a[h] কে a[pivot]-এর সাথে বদলান
   Partition(a, l, h) ফেরত দিন
শেষ

QuickSort(int a[], int l, int h)

শুরু
   int pindex;
   যদি (l < h)
      pindex = RandomPivotPartition(a, l, h)
      QuickSort(a, l, pindex - 1)
      QuickSort(a, pindex + 1, h)
   0 ফেরত দিন
শেষ

উদাহরণ কোড

#include <iostream>
#include <cstdlib>
using namespace std;

void swap(int *a, int *b) {
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int Partition(int a[], int l, int h) {
    int pivot, index, i;
    index = l;
    pivot = h;
    for (i = l; i < h; i++) {
        if (a[i] < a[pivot]) {
            swap(&a[i], &a[index]);
            index++;
        }
    }
    swap(&a[pivot], &a[index]);
    return index;
}

int RandomPivotPartition(int a[], int l, int h) {
    int pvt, n, temp;
    n = rand();
    pvt = l + n % (h - l + 1);
    swap(&a[h], &a[pvt]);
    return Partition(a, l, h);
}

int QuickSort(int a[], int l, int h) {
    int pindex;
    if (l < h) {
        pindex = RandomPivotPartition(a, l, h);
        QuickSort(a, l, pindex - 1);
        QuickSort(a, pindex + 1, h);
    }
    return 0;
}

int main() {
    int n, i;
    cout << "\nসর্ট করার ডাটা উপাদানের সংখ্যা লিখুন: ";
    cin >> n;
    int arr[n];
    for (i = 0; i < n; i++) {
        cout << "এলিমেন্ট " << i + 1 << ": ";
        cin >> arr[i];
    }
    QuickSort(arr, 0, n - 1);
    cout << "\nসর্টেড ডাটা ";
    for (i = 0; i < n; i++)
        cout << "->" << arr[i];
    return 0;
}

আউটপুট

সর্ট করার ডাটা উপাদানের সংখ্যা লিখুন: 4
এলিমেন্ট 1: 3
এলিমেন্ট 2: 4
এলিমেন্ট 3: 7
এলিমেন্ট 4: 6
সর্টেড ডাটা ->3->4->6->7

  1. C++ প্রোগ্রাম: হিপ সর্ট বাস্তবায়ন

  2. C++ প্রোগ্রাম: বাবল সর্ট বাস্তবায়ন

  3. C++ প্রোগ্রাম: বাকেট সর্ট বাস্তবায়ন

  4. C++ প্রোগ্রাম: র‍্যাডিক্স সর্ট বাস্তবায়ন