Cod sursa(job #3031014)

Utilizator TirilaPatricTirila Patric-Gabriel TirilaPatric Data 18 martie 2023 11:51:07
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.53 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
#include <ratio>
#include <chrono>
#include <fstream>

using namespace std;
//int medianOf3(vector<int> Vector, int left, int right) {
//    int mid = (left + right) / 2;
//
//    if (Vector[left] > Vector[mid])
//        swap(Vector[left], Vector[mid]);
//
//    if (Vector[mid] > Vector[right])
//        swap(Vector[mid], Vector[right]);
//
//    if (Vector[left] > Vector[right])
//        swap(Vector[left], Vector[right]);
//
//
//    swap(Vector[mid], Vector[right-1]);
//    return Vector[right - 1];
//}
//int part2(vector<int>& Vector, int left, int right){
//    int pivot = medianOf3(Vector, left, right), j = left-1;
//    for(int i=left;i<=right;i++) {
//        if (Vector[i] <= pivot) {
//            swap(Vector[j++], Vector[i]);
//        }
//    }
//
//    for(int i=left;i<=right;i++) {
//        if (Vector[j] == pivot){
//            swap(Vector[j+1], Vector[i]);
//            j += 1;
//        }
//    }
//    return j;
//}
//void quicksort2(vector<int>& Vector, int left, int right){
//    if (left<right){
//        int index = part2(Vector, left, right);
//
//        quicksort(Vector, index+1, right);
//        quicksort(Vector, left, index-1);
//    }
//}

vector<int> sort2(vector<int> left, vector<int> right){
    int li = 0, ri = 0;
    vector<int> V = {};
    int ls = left.size(), rs = right.size();
    while(ls > li && rs > ri){
        if(left[li] < right[ri]){
            V.push_back(left[li]);
            li++;
        } else {
            V.push_back(right[ri]);
            ri++;
        }
    }

    for(int i=li; i<ls; i++){
        V.push_back(left[i]);
    }
    for(int i=ri; i<rs; i++){
        V.push_back(right[i]);
    }
    return V;
}
vector<int> sortare(vector<int> Vector){
    if(Vector.size() == 1){
        return Vector;
    }
    int mid = Vector.size()/2;
    vector<int> left, right;
    left = {};
    right = {};
    for(int i=0; i<mid; i++){
        left.push_back(Vector[i]);
    }
    for(int i=mid; i<Vector.size(); i++){
        right.push_back(Vector[i]);
    }

    return sort2(sortare(left), sortare(right));
}

int main(){
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    vector<int> V;
    int a, N;
    f>>N;
    while(N>0){
        f>>a;
        V.push_back(a);
        N--;
    }
    V = sortare(V);
    for(long unsigned int i=0; i<V.size(); i++){
        g<<V[i]<<" ";
    }
    return 0;
}