Pagini recente » Cod sursa (job #1483700) | Cod sursa (job #2537061) | Cod sursa (job #2908200) | Cod sursa (job #2914711) | Cod sursa (job #518701)
Cod sursa(job #518701)
#include <fstream>
using namespace std;
struct Node{
int val;
Node *next;
};
Node* middle(Node *p){
if(!p || !p->next) return p;
Node *q = p;
while(!q->next && !q->next->next){
q = q->next->next;
p = p->next;
}
Node *mid = p->next;
p->next = NULL;
return mid;
}
Node* merge(Node *p, Node *q){
if(!p) return q;
if(!q) return p;
Node *head = NULL, *tail = NULL;
if(p->val <= q->val)
head = p, p = p->next;
else head = q, q = q->next;
tail = head;
tail->next = NULL;
while(p && q){
if(p->val <= q->val){
tail->next = p;
tail = p;
p = p->next;
} else{
tail->next = q;
tail = q;
q = q->next;
}
tail->next = NULL;
}
if(p) tail->next = p;
else tail->next = q;
return head;
}
Node* mergesort(Node *p){
if(!p || !p->next) return p;
Node *mid = middle(p);
Node *p1 = mergesort(p);
Node *p2 = mergesort(mid);
merge(p1, p2);
}
int main(){
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, val;
Node *head = NULL, *tail = NULL, *p;
f >> n;
for(int i = 0; i < n; ++i){
f >> val;
p = new Node;
p->val = val;
p->next = NULL;
if(!head){
head = tail = p;
} else
tail->next = p;
tail = p;
}
}
head = mergesort(head);
for(p = head; !p; p = p->next)
g << p->val << " ";
return 0;
}