Skip to main content

Print elements in sorted order from a row_column wise sorted matrix

 


#include <iostream>


using namespace std;

 

struct Node {


    int val; 


    int r; 


    int c;

};

 



void minHeapify(Node harr[], int i, int heap_size)

{


    int l = i * 2 + 1;


    int r = i * 2 + 2;


     if(l < heap_size&& r<heap_size && harr[l].val < harr[i].val && harr[r].val < harr[i].val){


            Node temp=harr[r];


            harr[r]=harr[i];


            harr[i]=harr[l];


            harr[l]=temp;


            minHeapify(harr ,l,heap_size);


            minHeapify(harr ,r,heap_size);


        }


          if (l < heap_size && harr[l].val < harr[i].val){


            Node temp=harr[i];            


            harr[i]=harr[l];


            harr[l]=temp;


            minHeapify(harr ,l,heap_size);


        }

}

 



void sortedform(int mat[][3], int n)

{

    

int arr[n*n];

/*if row size 3 and column size 3 then the array should store 3*3=9 elements*/

    Node harr[n];


    for (int i = 0; i < n; i++)


        harr[i] = { mat[0][i], 0, i };

 


    Node p;


    for (int i = 0; i <=n*n-1; i++) {


 


        p = harr[0];



        int nextval = (p.r < (n - 1)) ? mat[p.r + 1][p.c]: INT_MAX;

 


        harr[0] = { nextval, (p.r)+1 ,p.c};


        minHeapify(harr, 0, n);

    arr[i]=harr[0].val;

    }

 

for(int i=0;i<n*n;i++)

{

    cout<<arr[i]<<" ";

}

   


    

}

 

// driver program to test above function


int main()

{

 int mat[3][3]={ {1,5,7},{8,10,12},{14,16,17}};

   


   


     sortedform(mat, 3);


    return 0;

}

 


Comments

Popular posts from this blog

Queue using link list c++ code

 Hi, guys code for queue using link list in c++ language #include<iostream> using namespace std; struct node {     int data;     node *next; }; struct node *front=0, *rear=0; void enqueue(int x) {     node *newnode;     newnode=new node;     newnode->next=0;     newnode->data=x;     if(front==0 and rear==0)     {         front=rear=newnode;     }     else     {         rear->next=newnode;         rear=newnode;     } } void display () {     node *temp=front;     while(temp!=0)     {         cout<<temp->data<<endl;         temp=temp->next;     } } void dequeue() {     node *temp=front;     front=front->next;     delete (temp) ; } main() {     enqueue(3) ;     enqueue (8) ;     enqueue(7) ;     dequeue () ;     display () ; }

Create and display Doubly circular link list in c++ code

 Hi, guys code for creating and displaying doubly circular link list using c++ given below #include <iostream> using namespace std; struct node {     int data;     node *next;     node *prev; }; struct node *tail,*head; /*creating doubly circular link list*/ void createdcll() {     node *newnode;     int choice;     head=0;     while (choice!=0)     {         newnode= new node;         cout<< "enter the dcll data" <<endl;         cin>>newnode->data;         if (head==0) {             head=tail=newnode;             head->next=head;             head->prev=head;         }         else {             tail->next=newnode;             newnode->prev=tail;             newnode->next=head;             head->prev=newnode;             tail=newnode;         }         cout<< "u wanna continue" ;         cin>>choice;     } } /*display doubly circular link list*/ void displaydcll() {