Pagini recente » Cod sursa (job #2378019) | Cod sursa (job #2597563) | Cod sursa (job #1909290) | Cod sursa (job #121966) | Cod sursa (job #1170389)
#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 bubbleSort(int st, int dr, int gap){
bool flag = true;
while (flag){
flag = false;
for (int i = st + gap ; i <= dr ; i++)
if ( v[i] < v[i - gap] ){
swap(v[i], v[i - gap]);
flag = true;
}
}
}
void shellSort(int st, int dr){
bool flag;
for (int k = gap[0] ; k ; k--)
for (int i = 0 ; i < gap[k] ; i++)
bubbleSort(st + i, dr, gap[k]);
}
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;
}