Cod sursa(job #3128874)

Utilizator HefaSteopoaie Vlad Hefa Data 11 mai 2023 11:17:09
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <stdio.h>

using namespace std;

int *v;

void MergeSort(int st, int dr)
{
  int m = (st + dr) / 2;
  if (st == dr)
  {
    return;
  }
  if (st + 1 == dr)
  {
    if (v[st] > v[dr])
    {
      int aux = v[st];
      v[st] = v[dr];
      v[dr] = aux;
    }
    return;
  }
  MergeSort(st, m);
  MergeSort(m + 1, dr);
  vector<int> interclasare;
  int k1 = st, k2 = m + 1;
  while (k1 <= m && k2 <= dr)
  {
    if (v[k1] < v[k2])
      interclasare.push_back(v[k1++]);
    else
      interclasare.push_back(v[k2++]);
  }
  while(k1 <= m)
    interclasare.push_back(v[k1++]);
  while(k2 <= dr)
    interclasare.push_back(v[k2++]);

  for (int i = st; i <= dr; i ++)
    v[i] = interclasare[i - st];
}

void QuickSort(int st, int dr)
{
  if (st >= dr)
    return;
  int random = rand() % (dr - st) + st;
  swap(v[random], v[dr]);
  int i = st, j = dr, k = 0;
  while(i < j)
  {
    if (v[i] > v[j])
    {
      int aux = v[i];
      v[i] = v[j];
      v[j] = aux;
      k = 1 - k;
    }
    i += k;
    j -= 1 - k;
  }
  QuickSort(st, i - 1);
  QuickSort(i + 1, dr);
}

int main()
{
  srand(time(NULL));
  ifstream fin ("algsort.in");
  ofstream fout ("algsort.out");
  int n;
  fin >> n;
  v = new int[n];
  for (int i = 0; i < n; i ++)
    fin >> v[i];
  QuickSort(0, n - 1);
  for (int i = 0; i < n; i ++)
    fout << v[i] << " ";
  return 0;
}