Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

3-वे क्विकसॉर्ट (डच नेशनल फ्लैग)


यहां हम क्विकसॉर्ट तकनीक देखेंगे लेकिन हम थ्री-वे क्विकसॉर्ट का उपयोग करेंगे। बेसिक क्विकसॉर्ट तकनीक केवल एक एलिमेंट को पिवट के रूप में ढूंढती है फिर ऐरे को पिवट के चारों ओर पार्टीशन करती है, उसके बाद पिवट के बाएं और दाएं सब ऐरे के लिए पुनरावृत्ति करती है।

थ्री-वे क्विकसॉर्ट समान है, लेकिन इसमें तीन सेक्शन होते हैं। ऐरे arr[1 से n] को तीन भागों में विभाजित किया जाता है।

  • arr[1 से i]
  • arr[i + 1, j]
  • arr[j + 1, n]

एल्गोरिदम

partition(arr, left, right, i, j) -

begin
    if right – left <= 1, then
        if arr[right] < arr[left], then
            swap arr[right] and arr[left]
        i := left
        j := right
        return
    end if
    mid := left, pivot = arr[right]
    while mid <= right, do
        if arr[mid] < pivot, then
            swap arr[left], arr[mid]
            increase left and mid by 1
        else if arr[mid] = pivot, then increase mid by 1
        else
            swap arr[mid], arr[right]
            decrease right by 1
    done
    i := left - 1
    j := mid
end

quicksort(arr, left, right) -

begin
    if left >= right, then
        return
    end if
    define i and j
    partition(arr, left, right, i, j)
    quicksort(arr, left, i)
    quicksort(arr, j, right)
end

उदाहरण

#include<iostream>
#include<vector>
using namespace std;
void partition(int arr[], int left, int right, int &i, int &j) {
    if (right - left <= 1) {
        if (arr[right] < arr[left])
            swap(arr[right], arr[left]);
        i = left;
        j = right;
        return;
    }
    int mid = left;
    int pivot = arr[right];
    while (mid <= right) {
        if (arr[mid] pivot)
            swap(arr[mid], arr[right--]);
    }
    i = left-1;
    j = mid;
}
void quicksort(int arr[], int left, int right) {
    if (left >= right) // 1 या 0 एलिमेंट्स
        return;
    int i, j;
    partition(arr, left, right, i, j);
    quicksort(arr, left, i);
    quicksort(arr, j, right);
}
void display(int arr[], int n) {
    for (int i = 0; i < n; ++i)
        cout << " " << arr[i];
    cout << endl;
}
int main() {
    int a[] = {4, 9, 4, 3, 1, 9, 4, 3, 9, 4, 3, 1, 4};
    int n = sizeof(a) / sizeof(int);
    display(a, n);
    quicksort(a, 0, n - 1);
    display(a, n);
}

आउटपुट

4 9 4 3 1 9 4 3 9 4 3 1 4
1 1 3 3 3 4 4 4 4 4 9 9 9

  1. C प्रोग्राम में O(n) समय और O(1) स्पेस में ऐरे का बायां रोटेशन प्रिंट करें C प्रोग्राम में O(n) समय और O(1) स्पेस में ऐरे का बायां रोटेशन प्रिंट करें

    समस्या विवरण हमें कुछ आकार n का एक ऐरे और कई पूर्णांक मान दिए गए हैं, हमें दिए गए इंडेक्स k से ऐरे को रोटेट करना होगा। उदाहरण इनपुट: arr[] = {1, 2, 3, 4, 5} K1 = 1, K2 = 3, K3 = 6 आउटपुट: 2 3 4 5 1 4 5 1 2 3 2 3 4 5 1 एल्गोरिदम शुरुआत चरण 1: void leftRotate(int arr[], int n, int k) फंक्शन घोषित क

  1. C प्रोग्राम में ऐरे रोटेशन के लिए प्रोग्राम C प्रोग्राम में ऐरे रोटेशन के लिए प्रोग्राम

    समस्या विवरण एक C प्रोग्राम लिखें जो ऐरे को n स्थिति से बाएं घुमाए। C प्रोग्रामिंग में ऐरे को n बार बाएं घुमाने का तरीका। C प्रोग्राम में ऐरे को n स्थिति से बाएं घुमाने का तर्क। उदाहरण इनपुट: arr[] = 1 2 3 4 5 6 7 8 9 10, N = 3 आउटपुट: 4 5 6 7 8 9 10 1 2 3 व्याख्या ऐरे में तत्व पढ़ें, मान लें ar

  1. पायथन प्रोग्राम: क्विकसॉर्ट पायथन प्रोग्राम: क्विकसॉर्ट

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक सरणी दी गई है, हमें क्विकसॉर्ट की अवधारणा का उपयोग करके इसे क्रमबद्ध करना है। यहां हम पहले सरणी को पार्टीशन करते हैं और क्रमबद्ध सरणी प्राप्त करने के लिए अलग-अलग पार्टीशन को क्रमबद्ध करते हैं। उदाहरण # विभाजन फ़ंक्शन def pa