ھڪڙي حد تائين ھڪڙي راھ جي ڀا wayي کي ڏنل ھڪڙي حد تائين


تڪليف جي سطح آسان
بار بار پڇڻ ۾ بينڪ بازار ڪاروڪ گاديء جو هڪ قلعي فاب مونفيرف ليبز ڪنڊوزس Twilio ياهو
ڪيريو

مسئلي جو بيان

توھان کي ھڪڙو ڏنو وڃي ٿو صف of جيتريون ۽ گهٽ ويليو ۽ هاءِ ويليو جو هڪ حد. مسئلو ”ترتيب ڏنل ٽن صفن جي ترتيب ڏني وئي آهي” هڪ قطار کي ورهائڻ کان پڇي ٿو ته صف کي ٽن حصن ۾ ورهايو ويندو. صفن جو ڀا willو ٿيندو:

  1. پهرين ورهاitionي جا عنصر گهٽ ويليو کان گهٽ هوندا ،
  2. ايندڙ ورها suchو اهڙا عنصر جيڪي ڏنل حد ۾ موجود آهن اهي ورها partو ۽
  3. اعلي ويليو کان وڏو انگ صف جو ٽيون حصو ٿيندو.

مثال

arr[]={2,5,87,56,12,4,9,23,76,1,45}

lowValue = 15

highValue = 30
2 5 1 12 4 9 23 76 56 45 87

وضاحت

lowValue 15 آهي ، اهڙي طرح کاٻي پاسي جا نمبر LowValue کان گهٽ هوندا.

حد 15 ۽ 30 جي وچ ۾ آهي ، 23 اهو انگ آهي جيڪو هن حد جي وچ ۾ آهي

هاء ويليو 30 آهي ، سڀني نمبرن کان وڌيڪ ويليو ويليو س rightي پاسي هوندو.

ھڪڙي حد تائين ھڪڙي راھ جي ڀا wayي کي ڏنل ھڪڙي حد تائين

الورورٿم

1. Set the startingValue to 0 and endingValue to n-1.
2. Traverse the array.
    1. Check if the current array element is less than the value of lowValue if true then swap the arr[i] and arr[startingValue] and increase both startingValues and i by 1.
    2. Else check if the current array is greater than the highValue, swap the arr[i] and arr[endingValue] and increase the value of i and decrease the value of endingValue by 1.
    3. Else increase the value of i by 1.
3. Print the array.

وضاحت

اسان کي هڪ انڌي سِٽ ڏنو آهي ۽ گهٽ ويليو ۽ هاءِ ويليو جي رينج آهي. اسان کي شي ترتيب کي ترتيب ڏيڻ يا صف کي ورهائڻو آهي. اهڙو ته صف جو تمام ممڪن نمبر جيڪو گهٽ قدر کان گھٽ هوندو صف جي کاٻي پاسي هوندو. ۽ صف جو تعداد جيڪو صف جي حد جي وچ تي واقع آهي صف ۾ اڳيان هوندو. ۽ ايندڙ قدرون اھڙا ھوندا جيڪي نمبرز کان وڏا ھوندا اھي آخري ٿيندا.

اسان 0 کان صف بندي ڪنديth آخري انڊيڪس ڏانھن انڊيڪس. پر انهي کان اڳ ، اسان ڪجهه متغير جو اعلان ڪيو آهي ۽ ان کي ترتيب ڏيو صفائي جي 0 ۽ آخري ترتيب سان ترتيب ڏنل. مٽاسٽا ۾ جڏهن گھٽ ويليو کان گھٽ قدر ملي ٿي ، آپريشن ويليو ويليو تي ڪيو ويندو ۽ جڏهن ويليو ويليو ويليو کان وڏي قيمت ملي ته ، آپريشن ختم ويليو تي ڪيو ويندو. اسان صف کي ڳوليندا ۽ چڪاس ڪندا ته موجوده صف جو عنصر ڏنل گهٽ ويليو کان گهٽ آهي جيڪڏهن صحيح آهي ته پوءِ صف جي موجوده قيمت ۽ صف کي پهرين پوزيشن واري قيمت کي مٽايو. اهو ويليو اسان شروعات واري پوائنٽ کي ٽريڪ ڪندا ۽ ٻين قيمت عنصرن کي مٽائڻ لاءِ ختم ٿيڻ واري انڊيڪس جي ٽريڪ کي برقرار رکنداسين ، هڪ ٻي سويپ ڪئي ويندي جيڪڏهن عنصر موجوده صف واري عنصر جي قيمت کان وڌيڪ ملي ويو. ان کان پوء اختتامي ويليو اچي ٿو ، انڊيڪس جنهن ۾ عنصر موجوده عنصر سان بدلجي ويو آهي. جيڪڏهن ڪوبه شرط مطمئن نٿو ڪري جو ڏنل تعداد ڏنل حد ۾ ڪوڙ آهي ته پوءِ اسان ان کي تبديل نٿا ڪريون. جزيري مڪمل ٿيڻ کان پوءِ ، اسان وٽ گهربل سيارو آهي. اسان کي صرف سر ڇپائڻ جي ضرورت آهي.

ڪوڊ

سي ++ ڪوڊ حل ڪرڻ لاءِ ٽي صف جي ورها partي جي حد ڏني وئي آهي

#include<iostream>
using namespace std;

void getPartition(int arr[], int n, int lowValue, int highValue)
{
    int startingValue = 0, endingValue = n-1;

    for (int i=0; i<= endingValue;)
    {
        if (arr[i] < lowValue)
            swap(arr[i++], arr[startingValue++]);

        else if (arr[i] > highValue)
            swap(arr[i], arr[endingValue--]);

        else
            i++;
    }
}

int main()
{
    int arr[] = {2,5,87,56,12,4,9,23,76,1,45};
    int n = sizeof(arr)/sizeof(arr[0]);

    getPartition(arr, n, 15, 30);

    for (int i=0; i<n; i++)
        cout << arr[i] << " ";
}
2 5 1 12 4 9 23 76 56 45 87

جاوا ڪوڊ حل ڪرڻ لاءِ ٽي لائين جي ورها Threeي جي ترتيب ڏني وئي آهي

class ThreeWayPartition
{
    public static void getPartition(int[] arr, int lowValue, int highValue)
    {
        int n = arr.length;

        int startingValue = 0, endingValue = n-1;

        for(int i = 0; i <= endingValue;)
        {
            if(arr[i] < lowValue)
            {

                int temp = arr[startingValue];
                arr[startingValue] = arr[i];
                arr[i] = temp;
                startingValue++;
                i++;
            }
            else if(arr[i] > highValue)
            {

                int temp = arr[endingValue];
                arr[endingValue] = arr[i];
                arr[i] = temp;
                endingValue --;
            }
            else
                i++;
        }
    }
    public static void main (String[] args)
    {
        int arr[] = {2,5,87,56,12,4,9,23,76,1,45};

        getPartition(arr, 15, 30 );

        for (int i=0; i < arr.length; i++)
        {
            System.out.print(arr[i] + " ");

        }
    }
}
2 5 1 12 4 9 23 76 56 45 87

پيچيدگي تجزيي

وقت جي پيچيدگي

اي (ن) جتي “ن” صف ۾ موجود عنصرن جو تعداد آهي. جئين اسان صفن جي عناصر مٿان ڏور ڪيو آهي وقت جي پيچيدگي لڪير آهي.

خلائي پيچيدگي

اي (1) جيئن وڌيڪ جڳھ جي ضرورت ناھي. الگورتھم خود جاءِ واري الگورتھم آھي ۽ شروعاتي ڏنل صف کي تازه ڪاري ڪري رھيو آھي. ان ڪري الگورٿم جي خلائي پيچيدگي مستقل آهي جڏهن ته پروگرام سڌي آهي.