Cod sursa(job #2897370)

Utilizator iulitaalpetriIulita Alpetri iulitaalpetri Data 3 mai 2022 15:45:55
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.14 kb
#include <iostream>
#include <fstream>
using namespace std;
// ex 1
//int N, v[500000], aux[500000];
//void intercl(int st, int dr, int m){
//    int it_1= st;
//    int it_2= m+ 1;
//    int nr=0;
//    while(it_1<= m && it_2<= dr ){
//        if(v[it_1]< v[it_2] ){
//            aux[nr]= v[it_1];
//            nr++;
//             it_1++;
//        }
//        else {
//            aux[nr]= v[it_2];
//            it_2++;
//            nr++;
//        }
//    }
//    for (int i= it_1; i<=m; i++){
//        aux[nr]= v[i];
//        nr++;
//    }
//    for (int i= it_2; i<= dr; i++){
//        aux[nr]= v[i];
//        nr ++;
//
//    }
//    for(int i= st; i<= dr ;i++ ){
//        v[i]= aux[i- st];
//
//    }
//
//};
//
//void merge_sort(int st, int dr){
//    int mij;
//    if(st== dr) return ;
//    mij=(st+ dr)/ 2;
//    merge_sort(st, mij);
//    merge_sort(mij+1,  dr);
//    intercl(st, dr, mij);
//
//}
//int main() {
//    ifstream f("algsort.in");
//    ofstream g("algsort.out");
//
//    f>>N;
//    for (int i =0; i< N; i++){
//        f>>v[i];
//
//    }
//    merge_sort(0, N- 1);
//    for (int i=0; i<N;i++){
//        g<<v[i]<<" ";
//    }
//    f.close();
//    g.close();
//
//
//
//
//}
// quick sort
int N, v[500000];
int impartire(int st,int  dr){
    int pivot = v[st];
    int nr= 0;
    for (int i= st+ 1; i<= dr ; i++){
        if(v[i]<= pivot) nr++;
    }
    int i_pivot= st+ nr;
    int a= v[1];
    v[1]= v[i_pivot];
    v[i_pivot]= a;

    int i= st;
    int j= dr;

    while(i< i_pivot && j> i_pivot){
        while (v[i]<= pivot){
            i++;
        }

        while(v[i]> pivot){
            j--;

        }
        while(i< i_pivot && j> i_pivot){
            i++;
            j--;
            a= v[i];
            v[i]= v[j];
            v[j]= a;
    }}}


void quickSort( int st, int dr){

    if(st>= dr) return;


    int p =impartire(st, dr);


    quickSort(st, p - 1);


    quickSort( p + 1, dr);
}








int main(){
    ifstream f("algsort.in");
    ofstream g("algsort.out");

    f>>N;
    for (int i =0; i< N; i++){
        f>>v[i];

    }
    quickSort(0, N-1 );
    for(int i=0; i<N; i++){
        g<< v[i]<<" ";
    }
}