Pagini recente » Cod sursa (job #1602435) | Cod sursa (job #1691797) | Cod sursa (job #2563881) | Cod sursa (job #759129) | Cod sursa (job #3030988)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void swap(vector<int>& V, int i, int j){
int aux = V[i];
V[i] = V[j];
V[j] = aux;
}
int m3(vector<int> Vector, int left, int right) {
int mid = (left + right) / 2;
if (Vector[left] > Vector[mid])
swap(Vector, left, mid);
if (Vector[mid] > Vector[right])
swap(Vector, mid, right);
if (Vector[left] > Vector[right])
swap(Vector, left, right);
swap(Vector, mid, right - 1);
return Vector[right - 1];
}
int p(vector<int>& Vector, int left, int right){
int pivot = m3(Vector, left, right);
int i = left-1;
for(int j=left;j<=right;j++) {
if (Vector[j] < pivot) {
swap(Vector, i + 1, j);
i += 1;
}
}
for(int j=left;j<=right;j++) {
if (Vector[j] == pivot){
swap(Vector, i + 1, j);
i += 1;
}
}
return i;
}
vector<int> sortare(vector<int>& Vector, int left, int right){
if (left<right){
int index = p(Vector, left, right);
sortare(Vector, index+1, right);
sortare(Vector, left, index-1);
}
return Vector;
}
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, 0, V.size()-1);
for(long unsigned int i=0; i<V.size(); i++){
g<<V[i]<<" ";
}
return 0;
}