Cod sursa(job #2897364)

Utilizator bbia17Baicoianu Bianca bbia17 Data 3 mai 2022 15:29:40
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 4.13 kb
////mergesort
//#include <iostream>
//#include <fstream>
//using namespace std;
//ifstream f("algsort.in");
//ofstream g("algsort.out");
//
//int N, v[100];
//
//void merge(int v[], int left, int mij, int right)
//{
//    auto const subArrayOne = mij - left + 1;
//    auto const subArrayTwo = right - mij;
//
//    auto *leftArray = new int[subArrayOne],
//            *rightArray = new int[subArrayTwo];
//
//    // Copy data to temp arrays leftArray[] and rightArray[]
//    for (auto i = 0; i < subArrayOne; i++)
//        leftArray[i] = v[left + i];
//    for (auto j = 0; j < subArrayTwo; j++)
//        rightArray[j] = v[mij + 1 + j];
//
//    auto indexOfSubArrayOne = 0,
//    indexOfSubArrayTwo = 0;
//    int indexOfMergedArray = left;
//
//    while (indexOfSubArrayOne < subArrayOne && indexOfSubArrayTwo < subArrayTwo) {
//        if (leftArray[indexOfSubArrayOne] <= rightArray[indexOfSubArrayTwo]) {
//            v[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
//            indexOfSubArrayOne++;
//        }
//        else {
//            v[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
//            indexOfSubArrayTwo++;
//        }
//        indexOfMergedArray++;
//    }
//
//    while (indexOfSubArrayOne < subArrayOne) {
//        v[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
//        indexOfSubArrayOne++;
//        indexOfMergedArray++;
//    }
//    // Copy the remaining elements of
//    // right[], if there are any
//    while (indexOfSubArrayTwo < subArrayTwo) {
//        v[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
//        indexOfSubArrayTwo++;
//        indexOfMergedArray++;
//    }
//}
//
//
//void mergeSort(int v[], int start, int stop)
//{
//    if (start >= stop)
//        return;
//
//    auto mij = start + (stop -start) / 2;
//    mergeSort(v, start, mij);
//    mergeSort(v, mij + 1, stop);
//    merge(v, start, mij, stop);
//}
//
//
//int main() {
//    f >> N;
//    for (int i = 0; i < N; i++)
//        f >> v[i];
//
//    mergeSort(v, 0, N - 1);
//
//    for(int i = 0; i < N; i++)
//        g << v[i] << " ";
//
//    return 0;
//}

//MERGE SORT
//#include <iostream>
//#include <fstream>
//using namespace std;
//ifstream f("algsort.in");
//ofstream g("algsort.out");
//
//int N, v[500001];
//void merge(int v[], int left, int right, int mid)
//{
//    int i, j, k, c[500001];
//    i = left;
//    k = left;
//    j = mid + 1;
//    while (i <= mid && j <= right) {
//        if (v[i] < v[j]) {
//            c[k] = v[i];
//            k++;
//            i++;
//        }
//        else  {
//            c[k] = v[j];
//            k++;
//            j++;
//        }
//    }
//    while (i <= mid) {
//        c[k] = v[i];
//        k++;
//        i++;
//    }
//    while (j <= right) {
//        c[k] = v[j];
//        k++;
//        j++;
//    }
//    for (i = left; i < k; i++)  {
//        v[i] = c[i];
//    }
//}
//
//void merge_sort(int v[], int left, int right)
//{
//    if (left < right){
//        int mid=(left+right)/2;
//        merge_sort(v,left,mid);
//        merge_sort(v,mid+1,right);
//        merge(v,left,right,mid);
//    }
//}
//
//int main()
//{
//    f >> N;
//    for (int i = 0; i < N; i++)
//        f >> v[i];
//    merge_sort(v, 0, N-1);
//    for (int i = 0; i < N; i++)
//        g << v[i] << " ";
//}


//QUICK SORT

#include <iostream>
#include <fstream>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

int N, v[500001];

void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

// function to rearrange array
int partition(int v[], int left, int right) {

    int pivot = v[right];
    int i = (left - 1);

    for (int j = left; j < right; j++) {
        if (v[j] < pivot) {

            i++;

            swap(&v[i], &v[j]);
        }
    }

    swap(v[i + 1], v[right]);

    return (i + 1);
}

void quickSort(int v[], int left, int right) {
    if (left < right) {
        int pv = partition(v, left, right);
        quickSort(v, left, pv - 1);
        quickSort(v, pv + 1, right);
    }
}

int main() {
    f >> N;
    for (int i = 0; i < N; i++)
        f >> v[i];

    quickSort(v, 0, N - 1);

    for(int i = 0; i < N; i++)
        g << v[i] << " ";
}