Pagini recente » Cod sursa (job #642072) | Cod sursa (job #1170387)
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int N = 1 + 5e5, gap[] = {8, 1, 4, 10, 23, 57, 132, 301, 701};
int v[N];
void qsort(int st, int dr){
if (dr <= st)
return;
swap( v[dr], v[st + rand() % (dr - st + 1)] );
int poz = st;
for (int i = st ; i < dr ; i++)
if ( v[i] < v[dr] || (v[i] == v[dr] && (rand() & 1) ) ){
swap(v[i], v[poz]);
poz++;
}
swap(v[poz], v[dr]);
qsort(st, poz - 1);
qsort(poz + 1, dr);
}
void shellSort(int st, int dr){
bool flag;
for (int k = gap[0] ; k ; k--){
flag = true;
while (flag){
flag = false;
for (int i = st, j = st + gap[k] ; j <= dr ; i++, j++)
if ( v[i] > v[j] ){
swap(v[i], v[j]);
flag = true;
}
}
}
}
int main(){
ifstream in("algsort.in");
for (int i = 0 ; i <= v[0] ; i++)
in >> v[i];
in.close();
shellSort(1, v[0]);
ofstream out("algsort.out");
for (int i = 1 ; i <= v[0] ; i++)
out << v[i] << ' ';
out << '\n';
out.close();
return 0;
}