Pagini recente » Cod sursa (job #1345046) | Cod sursa (job #246733) | Cod sursa (job #1802371) | Cod sursa (job #409649) | Cod sursa (job #2914138)
#include <bits/stdc++.h>
using namespace std;
void bubble_sort(vector<int>& v, int n)
{
int i, j;
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - i - 1; j++)
if (v[j] > v[j + 1])
swap(v[j], v[j + 1]);
}
void merge(vector<int> &v, int l, int m, int r){
int i = l, j = m + 1, k = 0;
vector<int> c(r-l+1);
///interclasare
while(i <= m && j <= r) {
if(v[i]<=v[j])
c[k]=v[i++];
else
c[k]=v[j++];
k++;
}
while(i<=m)
c[k++]=v[i++];
while(j<=r)
c[k++]=v[j++];
for (i = l, k = 0; i <= r; i++, k++)
v[i] = c[k];
c.clear();
}
void merge_sort(vector<int> &v, int l, int r) {
if (l < r) {
int m = l+(r-l)/2;
merge_sort(v, l, m);
merge_sort(v, m+1, r);
merge(v, l, m, r);
}
}
int rand_between(int a, int b){
int r = a + (rand() % ( b - a) );
if(r<a || r>b) throw EXIT_FAILURE;
return r;
}
int partition(vector<int> &arr, int l, int r){
int pivot = rand_between(l, r);
if(pivot!=r) swap(arr[pivot], arr[r]);
int x = arr[r], i = (l - 1);
for (int j = l; j <= r - 1; j++)
if (arr[j] < x){
i++;
swap(arr[i], arr[j]);
}
swap(arr[i + 1], arr[r]);
return (i + 1);
}
void quick_sort(vector<int> &arr, int l, int r){
if(l>=r) return;
int pi = partition(arr, l, r);
quick_sort(arr, l, pi - 1);
quick_sort(arr, pi + 1, r);
}
void count_sort(vector<int>&v, int nr_elem, int val_max) {
vector<int> cnt(val_max+1, 0);
for(auto &i:v)
cnt[i]++;
int x=0;
for(int j = 0; j < (int)cnt.size(); j++)
while(cnt[j]-- != 0)
v[x++] = j;
}
void algsort_infoarena()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
int val_max = 0;
int n;
in >> n;
vector<int> v(n);
for(int i=0; i<n; i++) {
in >> v[i];
if(v[i] > val_max) {
val_max = v[i];
}
}
count_sort(v, n, val_max);
for(int i=0; i<n; i++) {
out << v[i]<< ' ';
}
in.close();
out.close();
}
int main()
{
algsort_infoarena();
return 0;
}