Əlavə Yer olmadan Sıralama

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Belzabar GE Healthcare Mahindra Comviva MAQ Nvidia Qualcomm XidmətNow
Queue çeşidləyiciBaxılıb 36

Əlavə yer problemi olmadan növbə sıralamasında a queue, əlavə yer olmadan standart növbə əməliyyatları istifadə edərək sıralayın.

Nümunələr

Input
növbə = 10 -> 7 -> 2 -> 8 -> 6
Buraxılış
növbə = 2 -> 6 -> 7 -> 8 -> 10

Input
növbə = 56 -> 66 -> 1 -> 18 -> 23 -> 39
Buraxılış
növbə = 1 -> 18 -> 23 -> 39 -> 56 -> 66

Input
növbə = 5 -> 4 -> 3 -> 2 -> 1
Buraxılış
növbə = 1 -> 2 -> 3 -> 4 -> 5

Əlavə boşluq olmadan növbəni çeşidləmək üçün alqoritm

İki hissədən ibarət növbəni nəzərdən keçirək, biri sıralanır, digəri sıralanmır. Başlanğıcda, bütün elementlər sıralanmamış hissədə mövcuddur.
Hər addımda, sıralanmamış növbədən minimum elementin indeksini tapın və növbənin sonuna, yəni sıralanmış hissəyə aparın.
Bütün elementlər sıralanmış növbədə olmayana qədər bu addımı təkrarlayın.

  1. N-nin növbənin ölçüsü olduğu i = 0-dan n-ə (daxil deyil) bir döngə işlədin.
  2. Hər təkrarlamada minIndex-i -1 və minValue -infinity olaraq başladın.
  3. Minimum element indeksini çeşidlənməmiş növbədən tapan j dəyişən ilə başqa bir döngə işlədin. Sıralanmamış növbə, müəyyən bir i dəyəri üçün indeks 0-dan indeksə (n - i) qədərdir. Hər təkrarlamada, cari element minValue-dan azdırsa, minValue-nu cari element və minIndex-i j kimi yeniləyin.
  4. Növbədə keçin və elementi minIndex mövqeyində çıxarın və növbənin sonunda itələyin.
  5. Sıra sıralanır, elementlərini çap edin.

Əlavə Yer olmadan Sıranın Çeşidlənməsi üçün İzahat

Bir nümunəyə baxaq,
növbə = 10 -> 7 -> 2 -> 8 -> 6

Başlanğıcda, bütün elementlər çeşidlənməmiş hissədə mövcuddur, yəni

Əlavə Yer olmadan Sıralama

Hər addımda, çeşidlənməmiş hissədə minimum elementin indeksini tapın və növbənin sonuna, yəni sıralanmış hissəyə aparın.

Əlavə Yer olmadan SıralamaPin

Bütün elementlər sıralanmış hissədə mövcuddur, buna görə dayanırıq.

Əlavə Yer olmadan Sıranı Çeşidləmək üçün JAVA Kodu

import java.util.LinkedList;
import java.util.Queue;

public class SortingAQueueWithoutExtraSpace {
    private static void sortQueue(Queue<Integer> queue) {
        int n = queue.size();

        for (int i = 0; i < n; i++) {
            // Find the index of smallest element from the unsorted queue
            int minIndex = -1;
            int minValue = Integer.MAX_VALUE;
            for (int j = 0; j < n; j++) {
                int currValue = queue.poll();
                // Find the minimum value index only from unsorted queue
                if (currValue < minValue && j < (n - i)) {
                    minValue = currValue;
                    minIndex = j;
                }
                queue.add(currValue);
            }

            // Remove min value from queue
            for (int j = 0; j < n; j++) {
                int currValue = queue.poll();
                if (j != minIndex) {
                    queue.add(currValue);
                }
            }
            // Add min value to the end of the queue
            queue.add(minValue);
        }

        // Print the sorted queue
        for (Integer i : queue) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        // Example 1
        Queue<Integer> q1 = new LinkedList<>();
        q1.add(10);
        q1.add(7);
        q1.add(2);
        q1.add(8);
        q1.add(6);
        sortQueue(q1);

        // Example 2
        Queue<Integer> q2 = new LinkedList<>();
        q2.add(56);
        q2.add(66);
        q2.add(1);
        q2.add(18);
        q2.add(23);
        q2.add(39);
        sortQueue(q2);
    }
}
2 6 7 8 10 
1 18 23 39 56 66

Əlavə Yer olmadan Sıranı Çeşidləmək üçün C ++ Kodu

#include<bits/stdc++.h> 
using namespace std;

void sortQueue(queue<int> &queue) {
    int n = queue.size();
    
    for (int i = 0; i < n; i++) {
        // Find the index of smallest element from the unsorted queue
        int minIndex = -1;
        int minValue = INT_MAX;
        for (int j = 0; j < n; j++) {
            int currValue = queue.front();
            queue.pop();
            // Find the minimum value index only from unsorted queue
            if (currValue < minValue && j < (n - i)) {
                minValue = currValue;
                minIndex = j;
            }
            queue.push(currValue);
        }Nvidia
Belzabar
        
        // Remove min value from queue
        for (int j = 0; j < n; j++) {
            int currValue = queue.front();
            queue.pop();
            if (j != minIndex) {
                queue.push(currValue);
            }
        }
        // Add min value to the end of the queue
        queue.push(minValue);
    }
    
    // Print the sorted queue
    for (int i = 0; i < n; i++) {
        int curr = queue.front();
        queue.pop();
        cout<<curr<<" ";
        queue.push(curr);
    }
    cout<<endl;
}

int main() {
    // Example 1
    queue<int> q1;
    q1.push(10);
    q1.push(7);
    q1.push(2);
    q1.push(8);
    q1.push(6);
    sortQueue(q1);

    // Example 2
    queue<int> q2;
    q2.push(56);
    q2.push(66);
    q2.push(1);
    q2.push(18);
    q2.push(23);
    q2.push(39);
    sortQueue(q2);
}
2 6 7 8 10 
1 18 23 39 56 66

Mürəkkəblik təhlili

Zaman Mürəkkəbliyi = O (n)2)
Kosmik Mürəkkəblik = O (1)
burada n növbədəki elementlərin sayıdır.

References

Translate »