Cod sursa(job #1653892)

Utilizator razvandRazvan Dumitru razvand Data 16 martie 2016 17:54:12
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <limits.h>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

typedef struct PriorityQueue
{
	int data;
	int pri;
	PriorityQueue *next;
} pQ;

class PQueue
{
public:
	PQueue();
	~PQueue();
	void push(int, int);
	int pop();
	void display();
private:
	pQ *head;
};

PQueue::PQueue()
{
	head = NULL;
}

void PQueue::push(int d, int pri)
{
	pQ *ptr = new pQ;
	ptr->data = d;
	ptr->pri = pri;
	ptr->next = NULL;

	if(head == NULL) {
		head = ptr;
		return;
	}

	pQ *cur = head;
	pQ *prev = head;
	while(cur) {
		if(pri > cur->pri) {
			if(cur == head) {
				pQ *old = head;
				head = ptr;
				head->next = old;
				return;
			}
			prev->next = ptr;
			ptr->next = cur;
			return;
		}
		if(cur->next == NULL) {
			cur->next = ptr;
			return;
		}
		prev = cur;
		cur = cur->next;
	}
}

int PQueue::pop()
{
	if(head == NULL) return -1;
	int val = head->data;
	pQ *old = head;
	if(head->next) {
		head = head->next;
		delete old;
	}
	return val;
}

int main() {
    int n,a;

    PQueue *q = new PQueue();
    int mx = INT_MAX;

    in >> n;
    for(int i = 0; i < n; i++) {
        in >> a;
        q->push(a, mx-a);
        //s.push(a);
    }
    for(int i = 0; i < n; i++) {
        //out << s.top() << " ";
        out << q->pop() << " ";
    }
}