Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by registered user SKYDOS ( 17 years ago )
/*
 * Nick:   SKYDOS
 * Author: Andrew Shmig
 */
#include <fstream>
using namespace std;

int n, data[100], second[100], r, pos, st;

void sortq (int, int);
int partition (int, int);
int stat (int, int, int);
int partition2 (int, int);

int main() {
    freopen ("input.txt", "r", stdin);
    freopen ("output.txt", "w", stdout);

    scanf ("%d %d", &n, &pos;);
    for (int i=1; i<=n; i++) {
        scanf ("%d", &data;[i]);
        second[i] = data[i];
    }

    printf ("Before sorting:\n");
    for (int i=1; i<=n; i++) printf ("%i ", data[i]);
    
    sortq (1, n);

    printf ("\nAfter sorting:\n");
    for (int i=1; i<=n; i++) printf ("%i ", data[i]);

    printf ("\n\nUsing quicksort...");
    printf ("\nThe %ith statistic is %i\n\n", pos, data[pos]);

    printf ("Using another alg...\n");
    printf ("In @stat@ function...\n");
    st = stat (1, n, pos);
    printf ("The %ith statistic is %i\n\n", pos, st);

    return (0);
}

int partition2 (int b, int e) {
    int x, i;
    
    x = second[b];
    i = b;
    for (int l=b+1; l<=e; l++) {
        if (second[l]<=x) {
            i++;
            swap (second[l], second[i]);
        }
    }
    swap (second[i], second[b]);
    for (int k=1; k<=n; k++) printf ("%i ", second[k]);
    printf ("\n");
    return i;
}

int stat (int b, int e, int p) {
    if (b<e) {
        r = partition2 (b, e);
        if (r==p) return second[r]; else
            if (p<r) {
                stat (b, r-1, p);
            } else {
                stat (r+1, e, p);
            }
    }
}

int partition (int b, int e) {
    int x, i;

    x = data[b];
    i = b;
    for (int l=b+1; l<=e; l++) {
        if (data[l]<=x) {
            i++;
            swap (data[i], data[l]);
        }
    }
    swap (data[i], data[b]);
    return i;
}

void sortq (int b, int e) {
    if (b<e) {
        r = partition (b, e);
        sortq (b, r-1);
        sortq (r+1, e);
    }
}

 

Revise this Paste

Children: 64202
Your Name: Code Language: