Cod sursa(job #1508789)

Utilizator tudoras8tudoras8 tudoras8 Data 22 octombrie 2015 23:07:35
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.76 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <ctime>

using namespace std;

void quicksort(vector<int> &v, int l, int r) {
    if (l >= r) {
        return;
    }
    int p = v[l + rand() % (r - l + 1)];

    int i = l, j = r;
    do {
        while (v[i] < p) {
            ++i;
        }
        while (v[j] > p) {
            --j;
        }

        if (i <= j) {
            swap(v[i], v[j]);

            ++i;
            --j;
        }
    } while (i < j);

    quicksort(v, i, r);
    quicksort(v, l, j);
}

void bubblesort(vector<int> &v, int l, int r) {
    int swapped;

    do {
        swapped = 0;

        for (int i = l; i <= r - 1; ++i) {
            if (v[i] > v[i + 1]) {
                swap(v[i], v[i + 1]);
                swapped = 1;
            }
        }
    } while (swapped);
}

void insertionsort(vector<int> &v, int l, int r) {
    for (int i = l + 1; i <= r; ++i) {
        int j = i;

        int x = v[i];

        while (j >= 1 && v[j - 1] > x) {
            v[j] = v[j - 1];
            --j;
        }
        v[j] = x;
    }
}

void stoogesort(vector<int> &x, int l, int r) {
    if (x[l] > x[r]) {
        swap(x[l], x[r]);
    }

    int length = r - l + 1;
    if (length >= 3) {
        stoogesort(x, l, r - length / 3);
        stoogesort(x, l + length / 3, r);
        stoogesort(x, l, r - length / 3);
    }
}

int main()
{
#ifdef LOCAL
    freopen("input", "r", stdin);
#else
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
#endif // LOCAL

    int n;
    vector<int> v;

    cin >> n;
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        v.push_back(x);
    }

    srand(time(0));
    stoogesort(v, 0, n - 1);

    for (int i = 0; i < n; ++i) {
        cout << v[i] << ' ';
    }

    return 0;
}