Pagini recente » Cod sursa (job #1999507) | Cod sursa (job #1715572) | Cod sursa (job #1593467) | Istoria paginii utilizator/anca.bragau | Cod sursa (job #1275890)
// FMI - Grupa 135 - Semigrupa 2 - Hareza Andrei
// Include
#include <fstream>
#include <cstdlib>
using namespace std;
// Clase
template<class T> class skipList;
template<class U> class skipListNode
{
skipListNode<U> *down, *right;
U value;
skipListNode()
{
down = right = '\0';
value = -1;
}
template<class T> friend class skipList;
};
template<class T> class skipList
{
skipListNode<T> *start;
int currentHeight;
public:
skipList()
{
srand(1951031);
start = new skipListNode<T>;
currentHeight = 1;
}
void insert(T value)
{
int h = 1;
while(rand() & 1)
++h;
if(currentHeight < h)
{
skipListNode<T> *temp = new skipListNode<T>;
temp->down = start;
start = temp;
++currentHeight;
}
skipListNode<T> *current = start, *lastAdded='\0';
int currentLevel = currentHeight;
while(current)
{
while(current->right && current->right->value < value)
current = current->right;
if(currentLevel <= h)
{
if(lastAdded)
{
lastAdded->down = new skipListNode<T>;
lastAdded = lastAdded->down;
lastAdded->value = value;
}
else
{
lastAdded = new skipListNode<T>;
lastAdded->value = value;
}
lastAdded->right = current->right;
current->right = lastAdded;
}
current = current->down;
--currentLevel;
}
}
void printSorted(ostream &file)
{
skipListNode<T> *current = start;
while(current->down)
current = current->down;
while(current->right)
{
file << (current = current->right)->value << ' ';
}
}
};
// Variabile
ifstream in("algsort.in");
ofstream out("algsort.out");
int num;
skipList<int> sl;
// Main
int main()
{
in >> num;
int value;
while(num--)
{
in >> value;
sl.insert(value);
}
sl.printSorted(out);
out << '\n';
in.close();
out.close();
return 0;
}