Pagini recente » Cod sursa (job #169829) | Cod sursa (job #1880513) | Cod sursa (job #354847) | Cod sursa (job #1020722) | Cod sursa (job #2984969)
#include <bits/stdc++.h>
void bubble_sort(int v[], int n)
{
bool ok;
do{
ok = false;
for(int i = 0; i < n-1; i++)
if(v[i] > v[i+1]) {std::swap(v[i], v[i+1]); ok = true;}
}while(ok);
}
void selection_sort(int v[], int n)
{
for(int i = 0; i < n-1; i++)
for(int j = i + 1; j < n; j++)
{
if(v[i] > v[j]) std::swap(v[i], v[j]);
}
}
int tmp[500005];
void merge_sort(int v[], int left, int right)
{
if(left < right)
{
int m = (left + right) / 2;
merge_sort(v, left, m);
merge_sort(v, m+1, right);
int i = left, j = m+1, k = 0;
while(i <= m && j <= right)
{
if(v[i] < v[j]) tmp[k++] = v[i++];
else tmp[k++] = v[j++];
}
while(i <= m) tmp[k++] = v[i++];
while(j <= right) tmp[k++] = v[j++];
for(int i = left, j = 0; i <= right; i++, j++)
v[i] = tmp[j];
}
}
int partition(int v[], int left, int right)
{
int pivot = v[(left+right) / 2], i = left - 1, j = right + 1;
while(true)
{
do{i = i + 1;}while(v[i] < pivot);
do{j = j - 1;}while(v[j] > pivot);
if(i >= j) return j;
std::swap(v[i], v[j]);
}
}
void quicksort(int v[], int left, int right)
{
if(left >= 0 && right >= 0 && left < right)
{
int pi = partition(v, left, right);
quicksort(v, left, pi);
quicksort(v, pi+1, right);
}
}
int main()
{
int v[500005], n;
std::ifstream f1("algsort.in");
std::ofstream f2("algsort.out");
f1 >> n;
for(int i = 0; i < n; i++) f1 >> v[i];
quicksort(v, 0, n-1);
for(int i = 0; i < n; i++) f2 << v[i] << " ";
}