/* FILE: quickSort.cpp last change: 16-Mar-2001 author: Avancini Andrea */ #include #include const long int MAX_INTEGERS = 1000; void quicksort(double*, const long int, const long int); inline void swap(double*, double*); main(int argc, char** argv) { if (argc < 2 || argc > 3) { cerr << "syntax:" << endl << " > quicksort " << endl << "or" << endl << " > quicksort " << endl << "where, = input file of unordered numbers" << endl << "and, = output sorted file" << endl; exit(1); } ifstream in; in.open(argv[1]); if (!in.good()) { cerr << "err: file " << argv[1] << " does not exist" << endl; exit(1); } double A[MAX_INTEGERS]; long int n = 0; while (!in.eof()) { if (n++ > MAX_INTEGERS) { cerr << "err: file " << argv[1] << " contains more than " << MAX_INTEGERS << " integers." << endl; exit(1); } in >> A[n]; } in.close(); quicksort(A, 0, n-1); if (argc == 2) for(long int i = 0; i < n; i++) cout << A[i] << endl; else { ofstream out; out.open(argv[2]); if (!out.good()) { cerr << "err: could not open file " << argv[2] << endl; exit(1); } for(long int i = 0; i < n; i++) out << A[i] << endl; out.close(); } } inline void swap(double* a, double* b) { double swap = *a; *a = *b; *b = swap; } void quicksort(double v[], const long int primo, const long int ultimo) { if(primo < ultimo) { long int p = primo; long int u = ultimo+1; double pivot = v[primo]; do { while(v[++p] < pivot); while(v[--u] > pivot); if(p < u) swap(&v[p],&v[u]); } while(p < u); swap(&v[primo],&v[u]); quicksort(v, primo, u-1); quicksort(v, u+1, ultimo); } }