Скачиваний:
22
Добавлен:
01.05.2014
Размер:
1.67 Кб
Скачать
#include <stdlib.h>
#include <stdio.h>
#include "sampler.h"
// double TArray[21];
void swap(double &p, double &q) {
double tmp = p;
p = q;
q = tmp;
}
void qsort(double *x, int n) {
SAMPLE;
int left [21];
int right [21];
left [1] = 1;
right [1] = n;
int sp = 1;
int i = 0;
int j = 0;
int mid = 0;
double pivot;
SAMPLE;
while (sp) {
SAMPLE;
if ( left [sp] >= right[sp]) {
sp--;
}
else {
i = left [sp ];
j = right [sp ];
pivot = x[j ];
mid = ((i+j) / 2);
SAMPLE;
if (( j - i) > 5) {
if ( (( x[mid] < pivot) && (x[mid] > x[i])) || (( x[mid] > pivot) && (x[mid] < x[i])) ) {
SAMPLE;
swap(x[mid], x[j ]) ;
}
else {
if ( (( x[ i ] < x[mid]) && (x[i] > pivot)) || (( x[ i ] > x[mid]) && (x[i] < pivot)) ) {
SAMPLE;
swap(x[i ], x[ j ]) ;
}
}
}
SAMPLE;
pivot = x[j ];
while (i < j) {
while (x[ i ] < pivot) {
i++;
}
SAMPLE;
j--;
while ((i < j) && (pivot < x[j])) {
j--;
}
SAMPLE;
if ( i < j) {
swap(x[i ], x[ j ]) ;
}
SAMPLE;
}
SAMPLE;
j = right [sp ];
swap(x[i ], x[ j ]) ;
if ( i - left [sp] >= right[sp] - i ) {
left [sp+1] = left[sp ];
right [sp+1] = i - 1;
left [sp] = i + 1;
}
else {
left [sp+1] = i + 1;
right [sp+1] = right[sp];
right [sp] = i - 1;
}
sp++;
SAMPLE;
}
}
SAMPLE;
}

int verify (double *x, int dim) {
int i = 1;
while ((x[ i] <= x[i+1]) && (i+1 <= dim)) {
i++;
}
if ( i == dim) {
return 0;
}
else {
return 1;
}
}

void init(double *x, int dim) {
for ( int i = 0; i <= dim; i++) {
x[ i ] = random(100);
}
}

void main() {
SAMPLE;
double a[21];
int m = 20;
randomize();
SAMPLE;
init (a, m);
SAMPLE;
qsort(a, m);
SAMPLE;
verify (a, m);
SAMPLE;
}
Соседние файлы в папке cpp
  • #
    01.05.20141.67 Кб22QS.CPP
  • #
    01.05.201418.12 Кб22QS.OBJ
  • #
    01.05.20141.58 Кб22QS1.CPP
  • #
    01.05.201417.74 Кб22QS1.OBJ
  • #
    01.05.20141.34 Кб22QS1.SMP
  • #
    01.05.2014172 б22QS1.SMV